Atomなどのフィードのsummaryにimgタグが入っているブログをよく見かけます。
imgタグだけ抜き出したい場合はどうすればよいでしょうか?
正規表現しかないのでしょうか。
gemはfeedjiraを使っています(昔はfeedzirraという名前だったらしいです)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
具体的なフィード(のURL)を上げてくださればお答えできるかもしれません。
例えばWebクリエイターボックスさんのようなブログです。
http://www.webcreatorbox.com/feed/
とのことなのでこれを料理してみましょう。
feedjira を使うのは初めてなので、取得の仕方が下手だったらゴメンナサイね。
lang
1require 'feedjira' 2 3feed = Feedjira::Feed.fetch_and_parse("http://www.webcreatorbox.com/feed/") 4img_tags = feed.entries.map do |entry| 5 Nokogiri::HTML.parse(entry.summary).css('img').to_html 6end
これで各エントリの img タグのみの配列が取得出来ました。
解説
Atom の各エントリの summary (XML 的には <description> タグ)を取得します。いま(2/23 17時半)だと一つ目( feed.entries[0].summary )は
<img width="773" height="406" src="http://www.webcreatorbox.com/wp-content/uploads/2015/02/thumb_ano.jpg" class="attachment-thumbnail wp-post-image" alt="thumb_ano" />WebクリエイターボックスのTwitter: @webcreatorboxでは毎日Webに関する記事や美しいデザイン・写真などを紹介しています。その中で今週人気だったつぶやきトップ10を紹介します。見逃してしまった人はこ […]
です。
ここから HTML である img タグを切り取ります。
HTML や XML をパースするのなら…やはり nokogiri ですね 。 feedjira は nokogiri に依存しているので、 require 'feedjira'
すれば nokogiri も使えるようになります。
feed.entries[0].summary は String なので、そのまま Nokogiri::HTML.parse でぶった切ります。
で css('img')
で img タグ部分を抜き取ります。(普段は XPath ばかり使うので当初は xpath('//img')
と書いていたのですが、 css のほうがシンプルになっていたので書き直しました。)
[#<Nokogiri::XML::Element:0x3fd35040e648 name="img" attributes=[#<Nokogiri::XML::Attr:0x3fd350415ca4 name="width" value="773">, #<Nokogiri::XML::Attr:0x3fd350415c90 name="height" value="406">, #<Nokogiri::XML::Attr:0x3fd350415c7c name="src" value="http://www.webcreatorbox.com/wp-content/uploads/2015/02/thumb_ano.jpg">, #<Nokogiri::XML::Attr:0x3fd350415c54 name="class" value="attachment-thumbnail wp-post-image">, #<Nokogiri::XML::Attr:0x3fd350415c40 name="alt" value="thumb_ano">]>]
これを to_html
で HTML に戻します。
<img width="773" height="406" src="http://www.webcreatorbox.com/wp-content/uploads/2015/02/thumb_ano.jpg" class="attachment-thumbnail wp-post-image" alt="thumb_ano">
この例ぐらいならば正規表現でも抜き出せますが、複雑になってくると大変です。なので、 nokogiri などの XML/HTML パーサを使いましょう。
別解: nokogiri だけで抜き出してみる
lang
1require 'nokogiri' 2require 'open-uri' 3 4doc = Nokogiri::XML.parse(open("http://www.webcreatorbox.com/feed/").read) 5doc.xpath('//channel/item').map do |item| 6 Nokogiri::HTML.parse(item.xpath('description').text).css('img').to_html 7end
Atom や RSS は XML なので nokogiri でパース出来ます。
投稿2015/02/23 08:09
編集2015/02/23 11:07総合スコア241
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/23 08:12
2015/02/24 02:33