urss 0.0.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +6 -0
- data/lib/urss/feed.rb +7 -1
- data/lib/urss/feed/atom.rb +1 -0
- data/lib/urss/feed/atom_entry.rb +10 -3
- data/lib/urss/feed/entry.rb +1 -1
- data/lib/urss/rss.rb +3 -0
- data/lib/urss/version.rb +1 -1
- data/spec/spec_helper.rb +9 -0
- data/spec/support/fixtures/atom_with_html.xml +82 -0
- data/spec/support/webmocks.rb +2 -1
- data/spec/urss/feed_spec.rb +5 -0
- data/spec/urss_spec.rb +191 -50
- metadata +7 -5
data/README.md
CHANGED
@@ -82,6 +82,12 @@ rss.entries.first.medias.first.content_url
|
|
82
82
|
#=> http://farm9.staticflickr.com/8159/6960539484_56665aba46_b.jpg
|
83
83
|
````
|
84
84
|
|
85
|
+
## Reporting not working Feed
|
86
|
+
|
87
|
+
If you encounter a Feed (RSS or Atom) where an attribute is not well parsed: Open an issue with a dump of the feed.
|
88
|
+
|
89
|
+
You can use `curl` to do this and post the output (Use [gists](https://gist.github.com/) if it is very long).
|
90
|
+
|
85
91
|
## Contributing
|
86
92
|
|
87
93
|
1. Fork it
|
data/lib/urss/feed.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class Urss::Feed
|
2
2
|
|
3
3
|
# ~~~~ Attributes ~~~~
|
4
|
-
attr_accessor :title, :url, :description, :updated_at, :entries
|
4
|
+
attr_accessor :title, :url, :description, :updated_at, :entries, :author
|
5
5
|
|
6
6
|
# ~~~~ Class methods ~~~~
|
7
7
|
|
@@ -12,6 +12,12 @@ class Urss::Feed
|
|
12
12
|
self.description = nil
|
13
13
|
self.updated_at = nil
|
14
14
|
self.entries = []
|
15
|
+
self.author = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def finalize!
|
19
|
+
# Fill in all entries author field with the Feed#author content when entry author field is empty
|
20
|
+
self.entries.each{|entry| entry.author = self.author if entry.author.nil? || entry.author == ""}
|
15
21
|
end
|
16
22
|
|
17
23
|
end
|
data/lib/urss/feed/atom.rb
CHANGED
@@ -13,6 +13,7 @@ class Urss::Feed::Atom < Urss::Feed
|
|
13
13
|
feed_rss.url = nokogiri_instance.xpath("//#{namespace}#{root_node}/#{namespace}link[@rel='self']").attr("href").value
|
14
14
|
feed_rss.description = nokogiri_instance.xpath("//#{namespace}#{root_node}/#{namespace}subtitle").text.strip
|
15
15
|
feed_rss.updated_at = nokogiri_instance.xpath("//#{namespace}#{root_node}/#{namespace}updated").text
|
16
|
+
feed_rss.author = nokogiri_instance.xpath("//#{namespace}#{root_node}/#{namespace}author/#{namespace}name").text
|
16
17
|
nokogiri_instance.xpath("//#{namespace}entry").each {|item| feed_rss.entries << Urss::Feed::Atom::Entry.build(item, namespace)}
|
17
18
|
|
18
19
|
feed_rss
|
data/lib/urss/feed/atom_entry.rb
CHANGED
@@ -11,10 +11,17 @@ class Urss::Feed::Atom::Entry < Urss::Feed::Entry
|
|
11
11
|
entry.url = nokogiri_instance.xpath("./#{namespace}link[@rel='alternate']").attr("href").value
|
12
12
|
entry.created_at = nokogiri_instance.xpath("./#{namespace}published").text
|
13
13
|
entry.author = nokogiri_instance.xpath("./#{namespace}author/#{namespace}name").text
|
14
|
-
entry.content = nokogiri_instance.xpath("
|
14
|
+
entry.content = case nokogiri_instance.xpath("./#{namespace}content").attr("type").value
|
15
|
+
when "xhtml", "html"
|
16
|
+
nokogiri_instance.xpath("./#{namespace}content").inner_html
|
17
|
+
else
|
18
|
+
nokogiri_instance.xpath("./#{namespace}content").text
|
19
|
+
end
|
15
20
|
|
16
|
-
|
17
|
-
|
21
|
+
unless (media = nokogiri_instance.xpath("./#{namespace}link[@rel='enclosure']")).empty?
|
22
|
+
if media_url = media.attr("href").value
|
23
|
+
entry.medias << Urss::Media.new(:content_url => media_url)
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
entry
|
data/lib/urss/feed/entry.rb
CHANGED
data/lib/urss/rss.rb
CHANGED
data/lib/urss/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,15 @@ require "support/webmocks"
|
|
12
12
|
|
13
13
|
require "urss"
|
14
14
|
|
15
|
+
# Logging is enabled when logs/ folder exists
|
16
|
+
logs_path = "logs"
|
17
|
+
if File.exists?(logs_path)
|
18
|
+
require "logger"
|
19
|
+
log_file_path = File.join(logs_path, "test.log")
|
20
|
+
FileUtils.touch(log_file_path) unless File.exists?(log_file_path)
|
21
|
+
@@logger = Logger.new(log_file_path)
|
22
|
+
end
|
23
|
+
|
15
24
|
RSpec.configure do |config|
|
16
25
|
|
17
26
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
|
3
|
+
<id>http://itunes.apple.com/lu/rss/topalbums/limit=10/xml</id>
|
4
|
+
<title>iTunes Store: Top Albums</title>
|
5
|
+
<updated>2012-08-20T10:51:05-07:00</updated>
|
6
|
+
<link rel="alternate" type="text/html" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=29763&popId=11&s=143451"/>
|
7
|
+
<link rel="self" href="http://itunes.apple.com/lu/rss/topalbums/limit=10/xml"/>
|
8
|
+
<icon>http://itunes.apple.com/favicon.ico</icon>
|
9
|
+
<author>
|
10
|
+
<name>iTunes Store</name>
|
11
|
+
<uri>http://www.apple.com/uk/itunes/</uri>
|
12
|
+
</author>
|
13
|
+
<rights>Copyright 2008 Apple Inc.</rights>
|
14
|
+
<entry>
|
15
|
+
<updated>2012-08-20T10:51:05-07:00</updated>
|
16
|
+
<id im:id="538385017">http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2</id>
|
17
|
+
<title>NRJ Party Summer Edition - 2012 - Various Artists</title>
|
18
|
+
<im:name>NRJ Party Summer Edition - 2012</im:name>
|
19
|
+
<link rel="alternate" type="text/html" href="http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2"/>
|
20
|
+
<im:contentType term="Music" label="Music">
|
21
|
+
<im:contentType term="Album" label="Album"/>
|
22
|
+
</im:contentType>
|
23
|
+
<category im:id="17" term="Dance" scheme="http://itunes.apple.com/lu/genre/music-dance/id17?uo=2" label="Dance"/>
|
24
|
+
<im:artist>Various Artists</im:artist>
|
25
|
+
<im:price amount="9.99000" currency="EUR">9,99 €</im:price>
|
26
|
+
<im:image height="55">http://a5.mzstatic.com/us/r1000/085/Music/v4/81/12/01/811201e7-96da-4c95-4fc1-c85ac3e716b1/5414165055532.55x55-70.jpg</im:image>
|
27
|
+
<im:image height="60">http://a2.mzstatic.com/us/r1000/085/Music/v4/81/12/01/811201e7-96da-4c95-4fc1-c85ac3e716b1/5414165055532.60x60-50.jpg</im:image>
|
28
|
+
<im:image height="170">http://a1.mzstatic.com/us/r1000/085/Music/v4/81/12/01/811201e7-96da-4c95-4fc1-c85ac3e716b1/5414165055532.170x170-75.jpg</im:image>
|
29
|
+
<rights>℗ 2012 541 / N.E.W.S.</rights>
|
30
|
+
<im:releaseDate label="29 June 2012">2012-06-29T00:00:00-07:00</im:releaseDate>
|
31
|
+
<im:itemCount>25</im:itemCount>
|
32
|
+
<content type="html"><table border="0" width="100%">
|
33
|
+
<tr>
|
34
|
+
<td>
|
35
|
+
<table border="0" width="100%" cellspacing="0" cellpadding="0">
|
36
|
+
<tr valign="top" align="left">
|
37
|
+
|
38
|
+
<td align="center" width="166" valign="top">
|
39
|
+
<a href="http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2"><img border="0" alt="NRJ Party Summer Edition - 2012artwork" src="http://a1.mzstatic.com/us/r1000/085/Music/v4/81/12/01/811201e7-96da-4c95-4fc1-c85ac3e716b1/5414165055532.170x170-75.jpg" /></a>
|
40
|
+
</td>
|
41
|
+
<td width="10"><img alt="" width="10" height="1" src="http://r.mzstatic.com/images/spacer.gif" /></td>
|
42
|
+
<td width="95%">
|
43
|
+
|
44
|
+
|
45
|
+
<b><a href="http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2">NRJ Party Summer Edition - 2012</a></b><br/>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
Various Artists
|
52
|
+
|
53
|
+
<font size="2" face="Helvetica,Arial,Geneva,Swiss,SunSans-Regular">
|
54
|
+
|
55
|
+
<br/>
|
56
|
+
<b>Genre:</b> <a href="http://itunes.apple.com/lu/genre/music-dance/id17?uo=2">Dance</a>
|
57
|
+
|
58
|
+
<br/>
|
59
|
+
<b>Price:</b> 9,99 €
|
60
|
+
|
61
|
+
<br/>
|
62
|
+
<b>Release Date:</b> 29 June 2012
|
63
|
+
|
64
|
+
</font>
|
65
|
+
</td>
|
66
|
+
</tr>
|
67
|
+
</table>
|
68
|
+
</td>
|
69
|
+
</tr>
|
70
|
+
<tr>
|
71
|
+
<td>
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
<font size="2" face="Helvetica,Arial,Geneva,Swiss,SunSans-Regular"> &#169; ℗ 2012 541 / N.E.W.S.</font>
|
76
|
+
|
77
|
+
</td>
|
78
|
+
</tr>
|
79
|
+
</table>
|
80
|
+
</content>
|
81
|
+
</entry>
|
82
|
+
</feed>
|
data/spec/support/webmocks.rb
CHANGED
@@ -6,4 +6,5 @@ stub_request(:get, "http://slashdot.org/").to_return(:status => 200, :body => Fi
|
|
6
6
|
stub_request(:get, "http://example.org/feed.atom").to_return(:status => 200, :body => File.open(File.join(File.dirname(__FILE__), "fixtures", "atom.xml")).read, :headers => {})
|
7
7
|
stub_request(:get, "http://api.flickr.com/services/feeds/photos_public.gne?format=rss_200&id=90313708@N00&lang=en-us").to_return(:status => 200, :body => File.open(File.join(File.dirname(__FILE__), "fixtures", "flickr_rss_200.xml")).read, :headers => {})
|
8
8
|
stub_request(:get, "http://api.flickr.com/services/feeds/photos_public.gne?id=90313708@N00&lang=en-us&format=atom").to_return(:status => 200, :body => File.open(File.join(File.dirname(__FILE__), "fixtures", "flickr_atom.xml")).read, :headers => {})
|
9
|
-
stub_request(:get, "http://api.flickr.com/services/feeds/geo/?id=90313708@N00&lang=en-us").to_return(:status => 200, :body => File.open(File.join(File.dirname(__FILE__), "fixtures", "flickr_geo.xml")).read, :headers => {})
|
9
|
+
stub_request(:get, "http://api.flickr.com/services/feeds/geo/?id=90313708@N00&lang=en-us").to_return(:status => 200, :body => File.open(File.join(File.dirname(__FILE__), "fixtures", "flickr_geo.xml")).read, :headers => {})
|
10
|
+
stub_request(:get, "http://example.org/feed.atom-html").to_return(:status => 200, :body => File.open(File.join(File.dirname(__FILE__), "fixtures", "atom_with_html.xml")).read, :headers => {})
|
data/spec/urss/feed_spec.rb
CHANGED
@@ -27,6 +27,11 @@ describe Urss::Feed do
|
|
27
27
|
subject.should respond_to(:entries)
|
28
28
|
subject.should respond_to(:entries=)
|
29
29
|
end
|
30
|
+
|
31
|
+
it "should have an attribute :author" do
|
32
|
+
subject.should respond_to(:author)
|
33
|
+
subject.should respond_to(:author=)
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
end
|
data/spec/urss_spec.rb
CHANGED
@@ -108,8 +108,8 @@ describe Urss do
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
describe "author" do
|
111
|
-
it "should be
|
112
|
-
@first_parsed_rss.author.should
|
111
|
+
it "should be nil" do
|
112
|
+
@first_parsed_rss.author.should be_nil
|
113
113
|
end
|
114
114
|
end
|
115
115
|
describe "categories" do
|
@@ -418,68 +418,209 @@ The difference between -- and : is huge for me [...]"""
|
|
418
418
|
end
|
419
419
|
|
420
420
|
context "Atom" do
|
421
|
-
context "
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
describe "Urss::Rss" do
|
427
|
-
describe "title" do
|
428
|
-
it "should return \"dive into mark\"" do
|
429
|
-
@parsed_rss.title.should == "dive into mark"
|
430
|
-
end
|
421
|
+
context "with xhtml entry content" do
|
422
|
+
context "when parsing the atom.xml example file at http://example.org/feed.atom" do
|
423
|
+
before { @parsed_rss = subject.at("http://example.org/feed.atom") }
|
424
|
+
it "should return an instance of Urss::Feed::Atom" do
|
425
|
+
@parsed_rss.should be_an_instance_of(Urss::Feed::Atom)
|
431
426
|
end
|
432
|
-
describe "
|
433
|
-
|
434
|
-
|
427
|
+
describe "Urss::Rss" do
|
428
|
+
describe "title" do
|
429
|
+
it "should return \"dive into mark\"" do
|
430
|
+
@parsed_rss.title.should == "dive into mark"
|
431
|
+
end
|
435
432
|
end
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
433
|
+
describe "url" do
|
434
|
+
it "should return \"http://example.org/feed.atom\"" do
|
435
|
+
@parsed_rss.url.should == "http://example.org/feed.atom"
|
436
|
+
end
|
440
437
|
end
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
438
|
+
describe "description" do
|
439
|
+
it "should return \"A emlot/em of effort\n went into making this effortless\"" do
|
440
|
+
@parsed_rss.description.should == "A emlot/em of effort\n went into making this effortless"
|
441
|
+
end
|
445
442
|
end
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
it "should be 1" do
|
450
|
-
@parsed_rss.entries.size.should be 1
|
443
|
+
describe "updated_at" do
|
444
|
+
it "should return \"2005-07-31T12:29:29Z\"" do
|
445
|
+
@parsed_rss.updated_at.should == "2005-07-31T12:29:29Z"
|
451
446
|
end
|
452
447
|
end
|
453
|
-
describe "
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
@first_parsed_rss.title.should == "Atom draft-07 snapshot"
|
448
|
+
describe "entries" do
|
449
|
+
describe "size" do
|
450
|
+
it "should be 1" do
|
451
|
+
@parsed_rss.entries.size.should be 1
|
458
452
|
end
|
459
453
|
end
|
460
|
-
describe "
|
461
|
-
|
462
|
-
|
454
|
+
describe "first" do
|
455
|
+
before { @first_parsed_rss = @parsed_rss.entries.first }
|
456
|
+
describe "title" do
|
457
|
+
it "should return \"Atom draft-07 snapshot\"" do
|
458
|
+
@first_parsed_rss.title.should == "Atom draft-07 snapshot"
|
459
|
+
end
|
463
460
|
end
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
461
|
+
describe "url" do
|
462
|
+
it "should return \"http://example.org/2005/04/02/atom\"" do
|
463
|
+
@first_parsed_rss.url.should == "http://example.org/2005/04/02/atom"
|
464
|
+
end
|
468
465
|
end
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
466
|
+
describe "comments_url" do
|
467
|
+
it "should be nil" do
|
468
|
+
@first_parsed_rss.comments_url.should be_nil
|
469
|
+
end
|
470
|
+
end
|
471
|
+
describe "created_at" do
|
472
|
+
it "should return \"2003-12-13T08:29:29-04:00\"" do
|
473
|
+
@first_parsed_rss.created_at.should == "2003-12-13T08:29:29-04:00"
|
474
|
+
end
|
475
|
+
end
|
476
|
+
describe "author" do
|
477
|
+
it "should return \"Mark Pilgrim\"" do
|
478
|
+
@first_parsed_rss.author.should == "Mark Pilgrim"
|
479
|
+
end
|
480
|
+
end
|
481
|
+
describe "categories" do
|
482
|
+
it "should be empty" do
|
483
|
+
@first_parsed_rss.categories.should be_empty
|
484
|
+
end
|
485
|
+
end
|
486
|
+
describe "content" do
|
487
|
+
it "should return the HTML code of the content node without transformation" do
|
488
|
+
@first_parsed_rss.content.should ==
|
489
|
+
"""
|
490
|
+
<div xmlns=\"http://www.w3.org/1999/xhtml\">
|
491
|
+
<p><i>[Update: The Atom draft is finished.]</i></p>
|
492
|
+
</div>
|
493
|
+
"""
|
494
|
+
end
|
473
495
|
end
|
474
496
|
end
|
475
|
-
|
476
|
-
|
477
|
-
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
end
|
501
|
+
context "with html entry content" do
|
502
|
+
context "when parsing the atom_with_html.xml example file at http://example.org/feed.atom-html" do
|
503
|
+
before { @parsed_rss = subject.at("http://example.org/feed.atom-html") }
|
504
|
+
it "should return an instance of Urss::Feed::Atom" do
|
505
|
+
@parsed_rss.should be_an_instance_of(Urss::Feed::Atom)
|
506
|
+
end
|
507
|
+
describe "Urss::Rss" do
|
508
|
+
describe "title" do
|
509
|
+
it "should return \"iTunes Store: Top Albums\"" do
|
510
|
+
@parsed_rss.title.should == "iTunes Store: Top Albums"
|
511
|
+
end
|
512
|
+
end
|
513
|
+
describe "url" do
|
514
|
+
it "should return \"http://itunes.apple.com/lu/rss/topalbums/limit=10/xml\"" do
|
515
|
+
@parsed_rss.url.should == "http://itunes.apple.com/lu/rss/topalbums/limit=10/xml"
|
516
|
+
end
|
517
|
+
end
|
518
|
+
describe "description" do
|
519
|
+
it "should be empty" do
|
520
|
+
@parsed_rss.description.should be_empty
|
521
|
+
end
|
522
|
+
end
|
523
|
+
describe "updated_at" do
|
524
|
+
it "should return \"2012-08-20T10:51:05-07:00\"" do
|
525
|
+
@parsed_rss.updated_at.should == "2012-08-20T10:51:05-07:00"
|
526
|
+
end
|
527
|
+
end
|
528
|
+
describe "author" do
|
529
|
+
it "should return \"iTunes Store\"" do
|
530
|
+
@parsed_rss.author.should == "iTunes Store"
|
531
|
+
end
|
532
|
+
end
|
533
|
+
describe "entries" do
|
534
|
+
describe "size" do
|
535
|
+
it "should be 1" do
|
536
|
+
@parsed_rss.entries.size.should be 1
|
478
537
|
end
|
479
538
|
end
|
480
|
-
describe "
|
481
|
-
|
482
|
-
|
539
|
+
describe "first" do
|
540
|
+
before { @first_parsed_rss = @parsed_rss.entries.first }
|
541
|
+
describe "title" do
|
542
|
+
it "should return \"NRJ Party Summer Edition - 2012 - Various Artists\"" do
|
543
|
+
@first_parsed_rss.title.should == "NRJ Party Summer Edition - 2012 - Various Artists"
|
544
|
+
end
|
545
|
+
end
|
546
|
+
describe "url" do
|
547
|
+
it "should return \"http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2\"" do
|
548
|
+
@first_parsed_rss.url.should == "http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2"
|
549
|
+
end
|
550
|
+
end
|
551
|
+
describe "comments_url" do
|
552
|
+
it "should be nil" do
|
553
|
+
@first_parsed_rss.comments_url.should be_nil
|
554
|
+
end
|
555
|
+
end
|
556
|
+
describe "created_at" do
|
557
|
+
it "should be empty" do
|
558
|
+
@first_parsed_rss.created_at.should be_empty
|
559
|
+
end
|
560
|
+
end
|
561
|
+
describe "author" do
|
562
|
+
it "should return \"iTunes Store\" (the feed author as there is no entry author)" do
|
563
|
+
@first_parsed_rss.author.should == "iTunes Store"
|
564
|
+
end
|
565
|
+
end
|
566
|
+
describe "categories" do
|
567
|
+
it "should be empty" do
|
568
|
+
@first_parsed_rss.categories.should be_empty
|
569
|
+
end
|
570
|
+
end
|
571
|
+
describe "content" do
|
572
|
+
it "should return the HTML code of the content node without transformation" do
|
573
|
+
@first_parsed_rss.content.should ==
|
574
|
+
"""<table border=\"0\" width=\"100%\">
|
575
|
+
<tr>
|
576
|
+
<td>
|
577
|
+
<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
|
578
|
+
<tr valign=\"top\" align=\"left\">
|
579
|
+
|
580
|
+
<td align=\"center\" width=\"166\" valign=\"top\">
|
581
|
+
<a href=\"http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2\"><img border=\"0\" alt=\"NRJ Party Summer Edition - 2012artwork\" src=\"http://a1.mzstatic.com/us/r1000/085/Music/v4/81/12/01/811201e7-96da-4c95-4fc1-c85ac3e716b1/5414165055532.170x170-75.jpg\" /></a>
|
582
|
+
</td>
|
583
|
+
<td width=\"10\"><img alt=\"\" width=\"10\" height=\"1\" src=\"http://r.mzstatic.com/images/spacer.gif\" /></td>
|
584
|
+
<td width=\"95%\">
|
585
|
+
|
586
|
+
|
587
|
+
<b><a href=\"http://itunes.apple.com/lu/album/nrj-party-summer-edition-2012/id538385017?uo=2\">NRJ Party Summer Edition - 2012</a></b><br/>
|
588
|
+
|
589
|
+
|
590
|
+
|
591
|
+
|
592
|
+
|
593
|
+
Various Artists
|
594
|
+
|
595
|
+
<font size=\"2\" face=\"Helvetica,Arial,Geneva,Swiss,SunSans-Regular\">
|
596
|
+
|
597
|
+
<br/>
|
598
|
+
<b>Genre:</b> <a href=\"http://itunes.apple.com/lu/genre/music-dance/id17?uo=2\">Dance</a>
|
599
|
+
|
600
|
+
<br/>
|
601
|
+
<b>Price:</b> 9,99 €
|
602
|
+
|
603
|
+
<br/>
|
604
|
+
<b>Release Date:</b> 29 June 2012
|
605
|
+
|
606
|
+
</font>
|
607
|
+
</td>
|
608
|
+
</tr>
|
609
|
+
</table>
|
610
|
+
</td>
|
611
|
+
</tr>
|
612
|
+
<tr>
|
613
|
+
<td>
|
614
|
+
|
615
|
+
|
616
|
+
|
617
|
+
<font size=\"2\" face=\"Helvetica,Arial,Geneva,Swiss,SunSans-Regular\"> &#169; ℗ 2012 541 / N.E.W.S.</font>
|
618
|
+
|
619
|
+
</td>
|
620
|
+
</tr>
|
621
|
+
</table>
|
622
|
+
"""
|
623
|
+
end
|
483
624
|
end
|
484
625
|
end
|
485
626
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: urss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/urss/version.rb
|
58
58
|
- spec/spec_helper.rb
|
59
59
|
- spec/support/fixtures/atom.xml
|
60
|
+
- spec/support/fixtures/atom_with_html.xml
|
60
61
|
- spec/support/fixtures/flickr_atom.xml
|
61
62
|
- spec/support/fixtures/flickr_geo.xml
|
62
63
|
- spec/support/fixtures/flickr_rss_200.xml
|
@@ -93,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
94
|
version: '0'
|
94
95
|
segments:
|
95
96
|
- 0
|
96
|
-
hash:
|
97
|
+
hash: -4392561072410245503
|
97
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
99
|
none: false
|
99
100
|
requirements:
|
@@ -102,16 +103,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
103
|
version: '0'
|
103
104
|
segments:
|
104
105
|
- 0
|
105
|
-
hash:
|
106
|
+
hash: -4392561072410245503
|
106
107
|
requirements: []
|
107
108
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.8.
|
109
|
+
rubygems_version: 1.8.24
|
109
110
|
signing_key:
|
110
111
|
specification_version: 3
|
111
112
|
summary: Ultra RSS is a Feed RSS parser.
|
112
113
|
test_files:
|
113
114
|
- spec/spec_helper.rb
|
114
115
|
- spec/support/fixtures/atom.xml
|
116
|
+
- spec/support/fixtures/atom_with_html.xml
|
115
117
|
- spec/support/fixtures/flickr_atom.xml
|
116
118
|
- spec/support/fixtures/flickr_geo.xml
|
117
119
|
- spec/support/fixtures/flickr_rss_200.xml
|