🗿
gofeed から画像を取ったり、取れなかったらどうするかという話
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