回答編集履歴

4

nokogiriのみでパース

2015/02/23 11:07

投稿

riocampos
riocampos

スコア241

test CHANGED
@@ -77,3 +77,31 @@
77
77
 
78
78
 
79
79
  この例ぐらいならば正規表現でも抜き出せますが、複雑になってくると大変です。なので、 nokogiri などの XML/HTML パーサを使いましょう。
80
+
81
+
82
+
83
+ # 別解: nokogiri だけで抜き出してみる
84
+
85
+
86
+
87
+ ```lang-ruby
88
+
89
+ require 'nokogiri'
90
+
91
+ require 'open-uri'
92
+
93
+
94
+
95
+ doc = Nokogiri::XML.parse(open("http://www.webcreatorbox.com/feed/").read)
96
+
97
+ doc.xpath('//channel/item').map do |item|
98
+
99
+ Nokogiri::HTML.parse(item.xpath('description').text).css('img').to_html
100
+
101
+ end
102
+
103
+ ```
104
+
105
+
106
+
107
+ Atom や RSS は XML なので nokogiri でパース出来ます。

3

末尾追記

2015/02/23 11:07

投稿

riocampos
riocampos

スコア241

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
  ここから HTML である img タグを切り取ります。
58
58
 
59
- HTML や XML をパースするのなら…やはり nokogiri ですね。 feedjira は nokogiri に依存しているので、 `require 'feedjira'` すれば nokogiri も使えるようになります。
59
+ **HTML や XML をパースするのなら…やはり nokogiri ですね** 。 feedjira は nokogiri に依存しているので、 `require 'feedjira'` すれば nokogiri も使えるようになります。
60
60
 
61
61
  feed.entries[0].summary は String なので、そのまま Nokogiri::HTML.parse でぶった切ります。
62
62
 
@@ -75,3 +75,5 @@
75
75
  > `<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">`
76
76
 
77
77
 
78
+
79
+ この例ぐらいならば正規表現でも抜き出せますが、複雑になってくると大変です。なので、 nokogiri などの XML/HTML パーサを使いましょう。

2

回答追記

2015/02/23 08:54

投稿

riocampos
riocampos

スコア241

test CHANGED
@@ -1 +1,77 @@
1
1
  具体的なフィード(のURL)を上げてくださればお答えできるかもしれません。
2
+
3
+ ---
4
+
5
+
6
+
7
+ > 例えばWebクリエイターボックスさんのようなブログです。
8
+
9
+ > http://www.webcreatorbox.com/feed/
10
+
11
+
12
+
13
+ とのことなのでこれを料理してみましょう。
14
+
15
+
16
+
17
+ feedjira を使うのは初めてなので、取得の仕方が下手だったらゴメンナサイね。
18
+
19
+
20
+
21
+ ```lang-ruby
22
+
23
+ require 'feedjira'
24
+
25
+
26
+
27
+ feed = Feedjira::Feed.fetch_and_parse("http://www.webcreatorbox.com/feed/")
28
+
29
+ img_tags = feed.entries.map do |entry|
30
+
31
+ Nokogiri::HTML.parse(entry.summary).css('img').to_html
32
+
33
+ end
34
+
35
+ ```
36
+
37
+
38
+
39
+ これで各エントリの img タグのみの配列が取得出来ました。
40
+
41
+
42
+
43
+ # 解説
44
+
45
+
46
+
47
+ Atom の各エントリの summary (XML 的には <description> タグ)を取得します。いま(2/23 17時半)だと一つ目( feed.entries[0].summary )は
48
+
49
+
50
+
51
+ > `<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を紹介します。見逃してしまった人はこ [&#8230;]`
52
+
53
+
54
+
55
+ です。
56
+
57
+ ここから HTML である img タグを切り取ります。
58
+
59
+ HTML や XML をパースするのなら…やはり nokogiri ですね。 feedjira は nokogiri に依存しているので、 `require 'feedjira'` すれば nokogiri も使えるようになります。
60
+
61
+ feed.entries[0].summary は String なので、そのまま Nokogiri::HTML.parse でぶった切ります。
62
+
63
+ で `css('img')` で img タグ部分を抜き取ります。(普段は XPath ばかり使うので当初は `xpath('//img')` と書いていたのですが、 css のほうがシンプルになっていたので書き直しました。)
64
+
65
+
66
+
67
+ > `[#<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">]>]`
68
+
69
+
70
+
71
+ これを `to_html` で HTML に戻します。
72
+
73
+
74
+
75
+ > `<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">`
76
+
77
+

1

追記

2015/02/23 08:50

投稿

riocampos
riocampos

スコア241

test CHANGED
@@ -1 +1 @@
1
- 具体的なフィードを上げてくださればお答えできるかもしれません。
1
+ 具体的なフィード(のURL)を上げてくださればお答えできるかもしれません。