feedparser 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +36 -7
- data/README.md +145 -10
- data/Rakefile +1 -1
- data/lib/feedparser.rb +3 -0
- data/lib/feedparser/author.rb +39 -0
- data/lib/feedparser/builder/atom.rb +64 -17
- data/lib/feedparser/builder/json.rb +46 -10
- data/lib/feedparser/builder/rss.rb +94 -15
- data/lib/feedparser/feed.rb +30 -6
- data/lib/feedparser/generator.rb +34 -0
- data/lib/feedparser/item.rb +31 -6
- data/lib/feedparser/tag.rb +23 -0
- data/lib/feedparser/version.rb +2 -2
- data/test/feeds/books/nostarch.rss +125 -0
- data/test/feeds/books/oreilly.feedburner.atom +387 -0
- data/test/feeds/books/pragprog.rss +148 -0
- data/test/feeds/byparker.json +4 -4
- data/test/feeds/daringfireball.atom +8 -1
- data/test/feeds/daringfireball.json +28 -0
- data/test/feeds/googlegroups.atom +2 -2
- data/test/feeds/googlegroups2.atom +1 -1
- data/test/feeds/headius.atom +6 -5
- data/test/feeds/inessential.json +13 -4
- data/test/feeds/jsonfeed.json +8 -3
- data/test/feeds/{lambdatheultimate.rss2 → lambdatheultimate.rss} +0 -0
- data/test/feeds/{learnenough.atom → learnenough.feedburner.atom} +12 -9
- data/test/feeds/news/nytimes-blogs-bits.rss +333 -0
- data/test/feeds/news/nytimes-paul-krugman.rss +60 -0
- data/test/feeds/news/nytimes-tech.rss +653 -0
- data/test/feeds/news/nytimes-thomas-l-friedman.rss +80 -0
- data/test/feeds/news/nytimes.rss +607 -0
- data/test/feeds/news/washingtonpost-blogs-innovations.rss +183 -0
- data/test/feeds/news/washingtonpost-politics.rss +35 -0
- data/test/feeds/news/washingtonpost-world.rss +29 -0
- data/test/feeds/ongoing.atom +1619 -0
- data/test/feeds/osm/blog.openstreetmap.rss +252 -0
- data/test/feeds/osm/blogs.openstreetmap.rss +585 -0
- data/test/feeds/osm/mapbox.rss +1883 -0
- data/test/feeds/{railstutorial.atom → railstutorial.feedburner.atom} +28 -27
- data/test/feeds/{rubyflow.rss2 → rubyflow.feedburner.rss} +7 -3
- data/test/feeds/{rubymine.rss2 → rubymine.feedburner.rss} +5 -6
- data/test/feeds/scripting.rss +881 -0
- data/test/feeds/{sitepoint.rss2 → sitepoint.rss} +8 -9
- data/test/feeds/spec/atom/author.atom +48 -0
- data/test/feeds/spec/atom/authors.atom +70 -0
- data/test/feeds/spec/atom/categories.atom +66 -0
- data/test/feeds/spec/json/microblog.json +11 -2
- data/test/feeds/spec/json/tags.json +33 -0
- data/test/feeds/spec/rss/author.rss +41 -0
- data/test/feeds/spec/rss/categories.rss +64 -0
- data/test/feeds/spec/rss/creator.rss +38 -0
- data/test/feeds/{xkcd.rss2 → xkcd.rss} +0 -0
- data/test/helper.rb +21 -16
- data/test/test_atom.rb +1 -1
- data/test/test_atom_live.rb +1 -1
- data/test/test_authors.rb +26 -0
- data/test/test_books.rb +25 -0
- data/test/test_feeds.rb +4 -2
- data/test/test_rss.rb +4 -4
- data/test/test_tags.rb +25 -0
- metadata +39 -10
@@ -1,12 +1,12 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<rss version="2.0"
|
2
3
|
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
3
4
|
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
4
5
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
5
6
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
6
7
|
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
7
8
|
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
8
|
-
xmlns:series="http://organizeseries.com/"
|
9
|
-
>
|
9
|
+
xmlns:series="http://organizeseries.com/">
|
10
10
|
|
11
11
|
<channel>
|
12
12
|
<title>SitePoint » Ruby</title>
|
@@ -207,13 +207,12 @@ Content Delivery Network via Amazon Web Services: CloudFront: dab1nmslvvntp.clou
|
|
207
207
|
|
208
208
|
---
|
209
209
|
|
210
|
-
feed.format:
|
211
|
-
feed.title:
|
212
|
-
feed.url:
|
213
|
-
feed.summary:
|
214
|
-
feed.generator: http://wordpress.org/?v=4.0
|
210
|
+
feed.format: rss 2.0
|
211
|
+
feed.title: SitePoint » Ruby
|
212
|
+
feed.url: http://www.sitepoint.com
|
213
|
+
feed.summary: Learn CSS | HTML5 | JavaScript | Wordpress | Tutorials-Web Development | Reference | Books and More
|
214
|
+
feed.generator.text: http://wordpress.org/?v=4.0
|
215
215
|
|
216
216
|
feed.items[0].title: Rails Model Caching with Redis
|
217
217
|
feed.items[0].url: http://www.sitepoint.com/rails-model-caching-redis/
|
218
218
|
feed.items[0].guid: http://www.sitepoint.com/?p=97720
|
219
|
-
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
3
|
+
<title>Test Author</title>
|
4
|
+
<link rel="alternate" type="text/html" href="http://example.com/" />
|
5
|
+
<link rel="self" type="application/atom+xml" href="http://example.com/feed.xml" />
|
6
|
+
<id>http://example.com</id>
|
7
|
+
<updated>2017-05-23T19:36:44Z</updated>
|
8
|
+
<author>
|
9
|
+
<name>John Jay Gruber</name>
|
10
|
+
<uri>http://example.com/</uri>
|
11
|
+
</author>
|
12
|
+
|
13
|
+
<entry>
|
14
|
+
<title>Feedbin, Too</title>
|
15
|
+
<link rel="alternate" type="text/html" href="https://feedbin.com/blog/2017/05/22/feedbin-supports-json-feed/" />
|
16
|
+
<id>tag:daringfireball.net,2017:/linked//6.33732</id>
|
17
|
+
<published>2017-05-23T18:50:36Z</published>
|
18
|
+
<updated>2017-05-23T19:03:33Z</updated>
|
19
|
+
<author>
|
20
|
+
<name>Max Gruber Jun.</name>
|
21
|
+
<uri>http://example.com/</uri>
|
22
|
+
</author>
|
23
|
+
<content type="text">
|
24
|
+
Ben Ubois, announcing support for JSON Feed in Feedbin...
|
25
|
+
</content>
|
26
|
+
</entry>
|
27
|
+
</feed>
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
feed.authors.size: >>> 1
|
32
|
+
feed.authors[0].name: John Jay Gruber
|
33
|
+
feed.authors[0].url: http://example.com/
|
34
|
+
feed.authors[0].email: >>> nil
|
35
|
+
|
36
|
+
feed.author.name: John Jay Gruber
|
37
|
+
feed.author.url: http://example.com/
|
38
|
+
feed.author.email: >>> nil
|
39
|
+
|
40
|
+
|
41
|
+
feed.items[0].authors.size: >>> 1
|
42
|
+
feed.items[0].authors[0].name: Max Gruber Jun.
|
43
|
+
feed.items[0].authors[0].url: http://example.com/
|
44
|
+
feed.items[0].authors[0].email: >>> nil
|
45
|
+
|
46
|
+
feed.items[0].author.name: Max Gruber Jun.
|
47
|
+
feed.items[0].author.url: http://example.com/
|
48
|
+
feed.items[0].author.email: >>> nil
|
@@ -0,0 +1,70 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
3
|
+
<title>Test Author</title>
|
4
|
+
<link rel="alternate" type="text/html" href="http://example.com/" />
|
5
|
+
<link rel="self" type="application/atom+xml" href="http://example.com/feed.xml" />
|
6
|
+
<id>http://example.com</id>
|
7
|
+
<updated>2017-05-23T19:36:44Z</updated>
|
8
|
+
<author>
|
9
|
+
<name>John Jay Gruber</name>
|
10
|
+
<uri>http://example.com/</uri>
|
11
|
+
</author>
|
12
|
+
<author>
|
13
|
+
<name>Frank Huber</name>
|
14
|
+
<uri>http://example.com/frank/</uri>
|
15
|
+
</author>
|
16
|
+
|
17
|
+
<entry>
|
18
|
+
<title>Feedbin, Too</title>
|
19
|
+
<link rel="alternate" type="text/html" href="https://feedbin.com/blog/2017/05/22/feedbin-supports-json-feed/" />
|
20
|
+
<id>tag:daringfireball.net,2017:/linked//6.33732</id>
|
21
|
+
<published>2017-05-23T18:50:36Z</published>
|
22
|
+
<updated>2017-05-23T19:03:33Z</updated>
|
23
|
+
<author>
|
24
|
+
<name>Max Gruber Jun.</name>
|
25
|
+
<uri>http://example.com/</uri>
|
26
|
+
</author>
|
27
|
+
<author>
|
28
|
+
<name>Frank Huber</name>
|
29
|
+
<uri>http://example.com/frank/</uri>
|
30
|
+
<email>frank@example.com</email>
|
31
|
+
</author>
|
32
|
+
<author>
|
33
|
+
<name>George Imker</name>
|
34
|
+
<uri>http://example.com/george/</uri>
|
35
|
+
</author>
|
36
|
+
<content type="text">
|
37
|
+
Ben Ubois, announcing support for JSON Feed in Feedbin...
|
38
|
+
</content>
|
39
|
+
</entry>
|
40
|
+
</feed>
|
41
|
+
|
42
|
+
---
|
43
|
+
|
44
|
+
feed.authors.size: >>> 2
|
45
|
+
feed.authors[0].name: John Jay Gruber
|
46
|
+
feed.authors[0].url: http://example.com/
|
47
|
+
feed.authors[0].email: >>> nil
|
48
|
+
feed.authors[1].name: Frank Huber
|
49
|
+
feed.authors[1].url: http://example.com/frank/
|
50
|
+
|
51
|
+
feed.author.name: John Jay Gruber
|
52
|
+
feed.author.url: http://example.com/
|
53
|
+
feed.author.email: >>> nil
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
feed.items[0].authors.size: >>> 3
|
58
|
+
feed.items[0].authors[0].name: Max Gruber Jun.
|
59
|
+
feed.items[0].authors[0].url: http://example.com/
|
60
|
+
feed.items[0].authors[0].email: >>> nil
|
61
|
+
feed.items[0].authors[1].name: Frank Huber
|
62
|
+
feed.items[0].authors[1].url: http://example.com/frank/
|
63
|
+
feed.items[0].authors[1].email: frank@example.com
|
64
|
+
feed.items[0].authors[2].name: George Imker
|
65
|
+
feed.items[0].authors[2].url: http://example.com/george/
|
66
|
+
feed.items[0].authors[2].email: >>> nil
|
67
|
+
|
68
|
+
feed.items[0].author.name: Max Gruber Jun.
|
69
|
+
feed.items[0].author.url: http://example.com/
|
70
|
+
feed.items[0].author.email: >>> nil
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<feed xmlns='http://www.w3.org/2005/Atom'>
|
3
|
+
<title>Test Categories</title>
|
4
|
+
<link rel="alternate" type="text/html" href="http://example.com/" />
|
5
|
+
<link rel="self" type="application/atom+xml" href="http://example.com/feed.xml" />
|
6
|
+
<id>http://example.com</id>
|
7
|
+
<updated>2017-05-23T19:36:44Z</updated>
|
8
|
+
|
9
|
+
<category term="jruby"/>
|
10
|
+
<category term="ruby"/>
|
11
|
+
<category term="java"/>
|
12
|
+
<category term="rails"/>
|
13
|
+
<category term="invokedynamic"/>
|
14
|
+
<category term="jvm"/>
|
15
|
+
<category term="application bundle"/>
|
16
|
+
<category term="compilation"/>
|
17
|
+
<category term="compiler"/>
|
18
|
+
<category term="dynamic dispatch"/>
|
19
|
+
<category term="dynamic languages"/>
|
20
|
+
<category term="ruby 2.0"/>
|
21
|
+
|
22
|
+
<entry>
|
23
|
+
|
24
|
+
<title>Rock Surprise</title>
|
25
|
+
<link href='https://www.tbray.org/ongoing/When/201x/2017/05/20/Rock-Surprise' />
|
26
|
+
<id>https://www.tbray.org/ongoing/When/201x/2017/05/20/Rock-Surprise</id>
|
27
|
+
<published>2017-05-20T12:00:00-07:00</published>
|
28
|
+
<updated>2017-05-21T11:13:00-07:00</updated>
|
29
|
+
|
30
|
+
<category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Music' />
|
31
|
+
<category scheme='https://www.tbray.org/ongoing/What/' term='Arts' />
|
32
|
+
<category scheme='https://www.tbray.org/ongoing/What/' term='Music' />
|
33
|
+
<category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Photos' />
|
34
|
+
<category scheme='https://www.tbray.org/ongoing/What/' term='Photos' />
|
35
|
+
|
36
|
+
<content type="text">
|
37
|
+
On a recent Saturday we accidentally took in two very
|
38
|
+
different pop-music concerts...
|
39
|
+
</content>
|
40
|
+
</entry>
|
41
|
+
</feed>
|
42
|
+
|
43
|
+
---
|
44
|
+
|
45
|
+
feed.tags.size: >>> 12
|
46
|
+
feed.tags[0].name: jruby
|
47
|
+
feed.tags[1].name: ruby
|
48
|
+
feed.tags[2].name: java
|
49
|
+
feed.tags[3].name: rails
|
50
|
+
feed.tags[4].name: invokedynamic
|
51
|
+
feed.tags[5].name: jvm
|
52
|
+
feed.tags[6].name: application bundle
|
53
|
+
feed.tags[7].name: compilation
|
54
|
+
feed.tags[8].name: compiler
|
55
|
+
feed.tags[9].name: dynamic dispatch
|
56
|
+
feed.tags[10].name: dynamic languages
|
57
|
+
feed.tags[11].name: ruby 2.0
|
58
|
+
|
59
|
+
|
60
|
+
feed.items[0].tags.size: >>> 5
|
61
|
+
feed.items[0].tags[0].name: Arts/Music
|
62
|
+
feed.items[0].tags[0].scheme: https://www.tbray.org/ongoing/What/
|
63
|
+
feed.items[0].tags[1].name: Arts
|
64
|
+
feed.items[0].tags[2].name: Music
|
65
|
+
feed.items[0].tags[3].name: Arts/Photos
|
66
|
+
feed.items[0].tags[4].name: Photos
|
@@ -26,9 +26,18 @@ feed.title: Brent Simmons’s Microblog
|
|
26
26
|
feed.url: https://example.org/
|
27
27
|
feed.feed_url: https://example.org/feed.json
|
28
28
|
|
29
|
-
feed.
|
29
|
+
feed.authors.size: >>> 1
|
30
|
+
feed.authors[0].name: Brent Simmons
|
31
|
+
feed.authors[0].url: http://example.org/
|
32
|
+
feed.authors[0].avatar: https://example.org/avatar.png
|
30
33
|
|
34
|
+
|
35
|
+
feed.items.size: >>> 1
|
31
36
|
feed.items[0].id: 2347259
|
32
37
|
feed.items[0].url: https://example.org/2347259
|
33
38
|
feed.items[0].content_text: Cats are neat. \n\nhttps://example.org/cats
|
34
|
-
feed.items[0].published:
|
39
|
+
feed.items[0].published: >>> DateTime.new( 2016, 2, 9, 14, 22, 0, '-7').utc
|
40
|
+
feed.items[0].published_local: >>> DateTime.new( 2016, 2, 9, 14, 22, 0, '-7')
|
41
|
+
|
42
|
+
>>> pp feed.items[0].published
|
43
|
+
>>> pp feed.items[0].published_local
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"version": "https://jsonfeed.org/version/1",
|
3
|
+
"title": "My Example Feed",
|
4
|
+
"home_page_url": "https://example.org/",
|
5
|
+
"feed_url": "https://example.org/feed.json",
|
6
|
+
"items": [
|
7
|
+
{
|
8
|
+
"id": "2",
|
9
|
+
"content_text": "This is a second item.",
|
10
|
+
"url": "https://example.org/second-item",
|
11
|
+
"tags": ["one", "two", "fourty four"]
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"id": "1",
|
15
|
+
"content_html": "<p>Hello, world!</p>",
|
16
|
+
"url": "https://example.org/initial-post",
|
17
|
+
"tags": ["compiler","dynamic dispatch","dynamic languages","ruby 2.0"]
|
18
|
+
}
|
19
|
+
]
|
20
|
+
}
|
21
|
+
|
22
|
+
---
|
23
|
+
|
24
|
+
feed.items[0].tags.size: >>> 3
|
25
|
+
feed.items[0].tags[0].name: one
|
26
|
+
feed.items[0].tags[1].name: two
|
27
|
+
feed.items[0].tags[2].name: fourty four
|
28
|
+
|
29
|
+
feed.items[1].tags.size: >>> 4
|
30
|
+
feed.items[1].tags[0].name: compiler
|
31
|
+
feed.items[1].tags[1].name: dynamic dispatch
|
32
|
+
feed.items[1].tags[2].name: dynamic languages
|
33
|
+
feed.items[1].tags[3].name: ruby 2.0
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<rss version="2.0">
|
3
|
+
<channel>
|
4
|
+
<title>Test Author</title>
|
5
|
+
<link>http://example.com/</link>
|
6
|
+
<description/>
|
7
|
+
<lastBuildDate>Mon, 29 May 2017 18:51:30 GMT </lastBuildDate>
|
8
|
+
<managingEditor>Matt Flegenheimer Jr.</managingEditor>
|
9
|
+
<webMaster>Matt Flegenheimer Sr.</webMaster>
|
10
|
+
<item>
|
11
|
+
<title>Jared Kushner’s Role Is Tested as Russia Case Grows</title>
|
12
|
+
<link>https://www.nytimes.com/2017/05/28/us/kushner-trump-relationship-russia-investigation.html?partner=rss&emc=rss</link>
|
13
|
+
<guid isPermaLink="true">https://www.nytimes.com/2017/05/28/us/kushner-trump-relationship-russia-investigation.html</guid>
|
14
|
+
<pubDate>Mon, 29 May 2017 01:23:57 GMT</pubDate>
|
15
|
+
<author>Peter Baker</author>
|
16
|
+
</item>
|
17
|
+
</channel>
|
18
|
+
</rss>
|
19
|
+
|
20
|
+
---
|
21
|
+
|
22
|
+
feed.authors.size: >>> 2
|
23
|
+
feed.authors[0].text: Matt Flegenheimer Jr.
|
24
|
+
feed.authors[0].to_s: Matt Flegenheimer Jr.
|
25
|
+
feed.authors[0].email: >>> nil
|
26
|
+
feed.authors[1].text: Matt Flegenheimer Sr.
|
27
|
+
feed.authors[1].to_s: Matt Flegenheimer Sr.
|
28
|
+
|
29
|
+
feed.author.text: Matt Flegenheimer Jr.
|
30
|
+
feed.author.to_s: Matt Flegenheimer Jr.
|
31
|
+
feed.author.email: >>> nil
|
32
|
+
|
33
|
+
|
34
|
+
feed.items[0].authors.size: >>> 1
|
35
|
+
feed.items[0].authors[0].text: Peter Baker
|
36
|
+
feed.items[0].authors[0].to_s: Peter Baker
|
37
|
+
feed.items[0].authors[0].email: >>> nil
|
38
|
+
|
39
|
+
feed.items[0].author.text: Peter Baker
|
40
|
+
feed.items[0].author.to_s: Peter Baker
|
41
|
+
feed.items[0].author.email: >>> nil
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<rss version="2.0">
|
3
|
+
<channel>
|
4
|
+
<title>Test Categories</title>
|
5
|
+
<link>http://example.com</link>
|
6
|
+
<description/>
|
7
|
+
<lastBuildDate>Mon, 29 May 2017 18:51:30 GMT </lastBuildDate>
|
8
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/des">United States Politics and Government</category>
|
9
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/des">Social Media</category>
|
10
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/mdes">News and News Media</category>
|
11
|
+
|
12
|
+
<item>
|
13
|
+
<title>Jared Kushner’s Role Is Tested as Russia Case Grows</title>
|
14
|
+
<link>https://www.nytimes.com/2017/05/28/us/kushner-trump-relationship-russia-investigation.html?partner=rss&emc=rss</link>
|
15
|
+
<guid isPermaLink="true">https://www.nytimes.com/2017/05/28/us/kushner-trump-relationship-russia-investigation.html</guid>
|
16
|
+
<description>It is unclear how Jared Kushner’s high-profile woes will affect his hard-won partnership with his father-in-law, perhaps the most stable in an often unstable White House.</description>
|
17
|
+
<pubDate>Mon, 29 May 2017 01:23:57 GMT</pubDate>
|
18
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/mdes">Presidents and Presidency (US)</category>
|
19
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/des">Appointments and Executive Changes</category>
|
20
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/nyt_geo">United States</category>
|
21
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/nyt_per">Jared Kushner</category>
|
22
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/nyt_per">Donald J. Trump</category>
|
23
|
+
</item>
|
24
|
+
|
25
|
+
<item>
|
26
|
+
<title>Reported Talks by Jared Kushner With Russia Would Be ‘Good Thing,’ Trump Official Says</title>
|
27
|
+
<link>https://www.nytimes.com/2017/05/28/us/politics/trump-returns-to-us-and-to-berating-newsmedia-on-twitter.html?partner=rss&emc=rss</link>
|
28
|
+
<guid isPermaLink="true">https://www.nytimes.com/2017/05/28/us/politics/trump-returns-to-us-and-to-berating-newsmedia-on-twitter.html</guid>
|
29
|
+
<description>John F. Kelly, the homeland security secretary, played down reports of a back channel. The president, meanwhile, resumed using Twitter as a weapon.</description>
|
30
|
+
<pubDate>Sun, 28 May 2017 16:57:05 GMT</pubDate>
|
31
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/nyt_per">Trump, Donald J</category>
|
32
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/des">United States Politics and Government</category>
|
33
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/des">Social Media</category>
|
34
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/mdes">News and News Media</category>
|
35
|
+
<category domain="http://www.nytimes.com/namespaces/keywords/nyt_org_all">Twitter</category>
|
36
|
+
</item>
|
37
|
+
</channel>
|
38
|
+
</rss>
|
39
|
+
|
40
|
+
---
|
41
|
+
|
42
|
+
feed.tags.size: >>> 3
|
43
|
+
feed.tags[0].name: United States Politics and Government
|
44
|
+
feed.tags[0].domain: http://www.nytimes.com/namespaces/keywords/des
|
45
|
+
feed.tags[1].name: Social Media
|
46
|
+
feed.tags[2].name: News and News Media
|
47
|
+
|
48
|
+
|
49
|
+
feed.items[0].tags.size: >>> 5
|
50
|
+
feed.items[0].tags[0].name: Presidents and Presidency (US)
|
51
|
+
feed.items[0].tags[0].domain: http://www.nytimes.com/namespaces/keywords/mdes
|
52
|
+
feed.items[0].tags[1].name: Appointments and Executive Changes
|
53
|
+
feed.items[0].tags[2].name: United States
|
54
|
+
feed.items[0].tags[3].name: Jared Kushner
|
55
|
+
feed.items[0].tags[4].name: Donald J. Trump
|
56
|
+
|
57
|
+
|
58
|
+
feed.items[1].tags.size: >>> 5
|
59
|
+
feed.items[1].tags[0].name: Trump, Donald J
|
60
|
+
feed.items[1].tags[0].domain: http://www.nytimes.com/namespaces/keywords/nyt_per
|
61
|
+
feed.items[1].tags[1].name: United States Politics and Government
|
62
|
+
feed.items[1].tags[2].name: Social Media
|
63
|
+
feed.items[1].tags[3].name: News and News Media
|
64
|
+
feed.items[1].tags[4].name: Twitter
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
|
3
|
+
<channel>
|
4
|
+
<title>Test Dublin Core</title>
|
5
|
+
<link>http://example.com/</link>
|
6
|
+
<description/>
|
7
|
+
<lastBuildDate>Mon, 29 May 2017 18:51:30 GMT </lastBuildDate>
|
8
|
+
<dc:creator>Matt Flegenheimer</dc:creator>
|
9
|
+
<item>
|
10
|
+
<title>Jared Kushner’s Role Is Tested as Russia Case Grows</title>
|
11
|
+
<link>https://www.nytimes.com/2017/05/28/us/kushner-trump-relationship-russia-investigation.html?partner=rss&emc=rss</link>
|
12
|
+
<guid isPermaLink="true">https://www.nytimes.com/2017/05/28/us/kushner-trump-relationship-russia-investigation.html</guid>
|
13
|
+
<pubDate>Mon, 29 May 2017 01:23:57 GMT</pubDate>
|
14
|
+
<dc:creator>Peter Baker</dc:creator>
|
15
|
+
</item>
|
16
|
+
</channel>
|
17
|
+
</rss>
|
18
|
+
|
19
|
+
---
|
20
|
+
|
21
|
+
feed.authors.size: >>> 1
|
22
|
+
feed.authors[0].text: Matt Flegenheimer
|
23
|
+
feed.authors[0].to_s: Matt Flegenheimer
|
24
|
+
feed.authors[0].email: >>> nil
|
25
|
+
|
26
|
+
feed.author.text: Matt Flegenheimer
|
27
|
+
feed.author.to_s: Matt Flegenheimer
|
28
|
+
feed.author.email: >>> nil
|
29
|
+
|
30
|
+
|
31
|
+
feed.items[0].authors.size: >>> 1
|
32
|
+
feed.items[0].authors[0].text: Peter Baker
|
33
|
+
feed.items[0].authors[0].to_s: Peter Baker
|
34
|
+
feed.items[0].authors[0].email: >>> nil
|
35
|
+
|
36
|
+
feed.items[0].author.text: Peter Baker
|
37
|
+
feed.items[0].author.to_s: Peter Baker
|
38
|
+
feed.items[0].author.email: >>> nil
|
File without changes
|
data/test/helper.rb
CHANGED
@@ -39,22 +39,27 @@ class Test
|
|
39
39
|
|
40
40
|
line = line.strip
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
42
|
+
|
43
|
+
if line.start_with? '>>>'
|
44
|
+
## for debugging allow "custom" code e.g. >>> pp feed.items[0].summary etc.
|
45
|
+
code = line[3..-1].strip
|
46
|
+
else
|
47
|
+
pos = line.index(':') ## assume first colon (:) is separator
|
48
|
+
expr = line[0...pos].strip ## NOTE: do NOT include colon (thus, use tree dots ...)
|
49
|
+
value = line[pos+1..-1].strip
|
50
|
+
|
51
|
+
## for ruby code use |> or >> or >>> or => or $ or | or RUN or ????
|
52
|
+
## otherwise assume "literal" string
|
53
|
+
|
54
|
+
if value.start_with? '>>>'
|
55
|
+
value = value[3..-1].strip
|
56
|
+
code="assert_equal #{value}, #{expr}"
|
57
|
+
elsif value.start_with? 'DateTime' ## todo/fix: remove; use >>> style
|
58
|
+
code="assert_equal #{value}, #{expr}"
|
59
|
+
else # assume value is a "plain" string
|
60
|
+
## note use %{ } so value can include quotes ('') etc.
|
61
|
+
code="assert_equal %{#{value}}, #{expr}"
|
62
|
+
end
|
58
63
|
end
|
59
64
|
|
60
65
|
puts "eval #{code}"
|