🗿

gofeed から画像を取ったり、取れなかったらどうするかという話

2022/01/26に公開

gofeedで画像も取得するまでのサンプルがなかった

gofeedはgolangのRSS取得をしてくれる便利パッケージです。ググりますと、7割り近く?がこのパッケージに関する記事です。

この記事もその記事に該当します。で、最近golangを使い始めた私としましては、便利と思うものの躓いたわけです。

画像とれなくね? と。

zenn feed から画像を取得

弊社のzenn rssを取得します。

feedzenn, _ := gofeed.NewParser().ParseURL("https://zenn.dev/dokokade/feed")

ループで記事を入れる配列に格納していきますね。

for i, item := range feedzenn.Items {
 ...
}

これだけだとgofeedさんは画像くれないんです。そこで。

//zenn img -> Enclosures
enclosures := item.Enclosures
if enclosures != nil {
	enc := *enclosures[0]
	ImgURL = enc.URL
}

zennではEnclosuresに画像URLがあります。これを配列に格納しまして 無事解決 です!

note feed から画像を取得

noteも取れません。同じ方法でも無理です!

宣伝も兼ねて弊社のフィードです。

feednote, _ := gofeed.NewParser().ParseURL("https://note.com/dokokade/rss")

noteはmedia:thumbnailってところに画像があります。

//note img -> media:thumbnail
extension := item.Extensions
thumbnail := extension["media"]["thumbnail"]
if thumbnail != nil {
	ImgURL = thumbnail[0].Value
}

ふぅ、これで 無事解決 です。

LINE BLOG feed から画像を取得

LINE BLOGをご存知ですか?この世にはLINEでブログをやっている会社もあるんです。
これが弊社のLINE BLOGです。

feedline, _ := gofeed.NewParser().ParseURL("https://lineblog.me/dokokade/index.rdf")

imageないんです。画像ナシ。今どきRSSにチカラを入れる訳がないですよね。そーですねっ!!
でも画像はあるんです。どこに?その各ページに ogpタグ があります。twitter:cardもあるかもね。

//line img -> meta ogp:image tag
client := &http.Client{}
req, _ := http.NewRequest("GET", item.Link, nil)
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
og := opengraph.NewOpenGraph()
err := og.ProcessHTML(strings.NewReader(string(body)))
if err != nil {
	fmt.Println(err)
}
ogimg := *og.Images[0]

ogp:imageタグからurlを引っこ抜きます。これで 万事解決 でっっす!!!!!
Tumblr とかもogpから取得しています。

Medium とかも上記のようなやり方で取得してましたが、弊社が記事投稿を休止中で消しちゃったので忘れました。

Discussion