Ruby FeedjiraとNokogiriでRSSフィードの画像情報を取得する


RSSフィードによってはimage情報が取得できないものもあるだが、大体のRSSはFeedjiraが解析したcontentの中に情報が含まれる。

Gemfile

gem 'feedjira'
gem 'nokogiri'
$ bundle install

を済ませておく。

RSSの解析

とても簡単。

rss = Feedjira::Feed.fetch_and_parse "https://rssのURL"

これが記事ごとの配列になっているので、記事単位へのアクセスは

item = rss[0]

となる。

各要素は以下のようなものとなる

item.title #記事のタイトル
item.published #記事の公開日
item.url #記事のURL
item.categories #記事の関連づけられたカテゴリーが配列で入る。これはアメブロ等フィードされないRSSもある。メタデータ次第ではundefined methodになるケースもあるので、アクセスする場合、item.respond_to?(:categories)で調べる必要がある。
item.content #Feedjiraが記事内容をhtml化したもの

画像情報の抽出

記事内にある画像情報がフィードされていた場合、Feedjiraがitem.content内にimage情報をタグとして書き出しているので、これをNokogiriを使って抽出すればよい。

document = Nokogiri::HTML.parse(item.content, nil, "utf-8")
images =   document.css('img')

imagesには配列が入るのであとは必要な分だけsrc属性を取得する。

document = Nokogiri::HTML.parse(item.content, nil, "utf-8")
image = nil
document.css('img').each do |src|
  image = src.attribute("src").value
  break
end