siuying-rssbook 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/rssbook.rb CHANGED
@@ -5,12 +5,14 @@ require "rubygems"
5
5
  require "prawn"
6
6
  require 'iconv'
7
7
  require 'logger'
8
- require 'hpricot'
8
+ require 'feed-normalizer'
9
9
  require 'open-uri'
10
+ require 'hpricot'
10
11
  require "prawn/measurement_extensions"
12
+ require 'prawn/format'
11
13
 
12
14
  module RSSBook
13
- VERSION = '0.1.3'
15
+ VERSION = '0.2.0'
14
16
 
15
17
  class Renderer
16
18
  def initialize(input, output, font = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf",
@@ -22,39 +24,79 @@ module RSSBook
22
24
  @log = Logger.new($STDOUT)
23
25
 
24
26
  puts "input: #{input}, output: #{output}"
25
- @feed = Hpricot.XML(open(input))
27
+
28
+ @feed = FeedNormalizer::FeedNormalizer.parse open(input)
26
29
  end
27
30
 
28
31
  def render
29
32
  puts "start document"
30
- @items = (@feed/"//item")
33
+ @items = @feed.entries
31
34
  Prawn::Document.generate @output, @options do |doc|
32
- doc.font @font
35
+ doc.font @font
33
36
  puts "num of items: #{@items.size}"
37
+
38
+ render_toc(doc)
39
+
40
+ count = 1
34
41
  @items.each do |item|
35
- title = (item/"/title").inner_text
36
- desc = (item/"/description").inner_text
37
- render_feed(doc, title, desc)
42
+ title = item.title
43
+ desc = item.content
44
+ link_id = "link_#{count}"
45
+ render_item(doc, title, desc, link_id)
46
+ count += 1
38
47
  end
39
48
  end
40
49
  puts "end document"
41
50
  end
42
51
 
43
52
  private
44
- def render_feed(doc, title, description)
53
+ def render_toc(doc)
54
+
55
+ # TITLE
56
+ doc.bounding_box([doc.bounds.left, doc.bounds.top], :width => doc.bounds.width) do
57
+ doc.text_options.update(:wrap => :character, :size => 32, :spacing => 4)
58
+ doc.tags :p => {:font_size => "1em", :color => "black"}
59
+ doc.styles :toc => {:font_size => "1.5em", :color => "black", :text_decoration => :underline},
60
+ :title => {:font_size => "3em"}, :details => {:kerning => true}
61
+
62
+ doc.pad_bottom(10) do
63
+ doc.text "<a name='title' class='toc title'></a>"
64
+ doc.text @feed.title
65
+ end
66
+
67
+ # TOC
68
+ doc.text_options.update(:wrap => :character, :size => 26, :spacing => 4)
69
+ count = 1
70
+ @items.each do |item|
71
+ title = item.title
72
+ doc.pad_bottom(5) do
73
+ doc.text "<p>#{count}</p><a href='#link_#{count}' class='toc'>#{title}</a>"
74
+ end
75
+
76
+ count += 1
77
+ end
78
+ doc.start_new_page
79
+ end
80
+ end
81
+
82
+ def render_item(doc, title, description, link_id)
45
83
  puts "render: #{title}"
46
84
  doc.bounding_box([doc.bounds.left, doc.bounds.top], :width => doc.bounds.width) do
47
- doc.pad_bottom(20) do
85
+ doc.pad_bottom(30) do
48
86
  doc.text_options.update(:wrap => :character, :size => 26, :spacing => 4)
87
+ doc.text "<a name='#{link_id}'/>"
49
88
  doc.text title
50
89
  end
51
-
90
+
52
91
  doc.text_options.update(:wrap => :character, :size => 20, :spacing => 4)
53
92
  description = Hpricot(description).inner_text
54
93
  description.split(/[\n\r][\n\r]?/).each do |d|
55
- doc.text d
94
+ doc.pad_bottom(15) do
95
+ doc.text d
96
+ end
56
97
  end
57
98
 
99
+ doc.text "<a href='#title' class='toc'>&lt;&lt;</a>"
58
100
  doc.start_new_page
59
101
  end
60
102
  end
data/rssbook.gemspec CHANGED
@@ -2,8 +2,8 @@ Gem::Specification.new do |s|
2
2
  s.specification_version = 2 if s.respond_to? :specification_version=
3
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
4
  s.name = 'rssbook'
5
- s.version = '0.1.3'
6
- s.date = '2009-06-09'
5
+ s.version = '0.2.0'
6
+ s.date = '2009-06-14'
7
7
 
8
8
  s.summary = s.description = "Convert RSS Feed to PDF format."
9
9
 
@@ -18,11 +18,15 @@ Gem::Specification.new do |s|
18
18
  bin/rssbook
19
19
  lib/rssbook.rb
20
20
  rssbook.gemspec
21
+ test/feeds/feed1.xml
22
+ test/feeds/feed2.xml
23
+ test/rss_test.rb
21
24
  ]
22
25
  # = MANIFEST =
23
26
 
24
27
  s.extra_rdoc_files = %w[README LICENSE]
25
28
  s.add_dependency 'prawn'
29
+ s.add_dependency 'feed-normalizer'
26
30
  s.add_dependency 'hpricot'
27
31
  s.has_rdoc = false
28
32
  s.executables = ["rssbook"]
@@ -0,0 +1,173 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <?xml-stylesheet href="/rss.xsl" type="text/xsl" media="screen"?>
3
+ <rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule">
4
+ <channel>
5
+ <title><![CDATA[Yahoo! 新聞 - 港聞]]></title>
6
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/rss/hongkong/rss.xml]]></link>
7
+ <description><![CDATA[Yahoo! 新聞 - 港聞]]></description>
8
+ <language>zh-HK</language>
9
+ <copyright>Copyright (c) 2008 Yahoo! Inc. All rights reserved.</copyright>
10
+
11
+ <lastBuildDate>Sun, 14 Jun 2009 00:27:20 +0800</lastBuildDate>
12
+ <ttl>5</ttl>
13
+ <image>
14
+ <title><![CDATA[Yahoo! 新聞 - 港聞]]></title>
15
+ <url><![CDATA[http://hk.yimg.com/i/nws/nws6_rss.gif]]></url>
16
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/rss/hongkong/rss.xml]]></link>
17
+ <width>144</width>
18
+ <height>31</height>
19
+
20
+ </image>
21
+ <item>
22
+ <title><![CDATA[柴灣海面發現浮屍無可疑]]></title>
23
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/cog6.html]]></link>
24
+ <description><![CDATA[柴灣貨物起卸區漁船停泊處下午發現一具男屍,未有發現任何證明文件,初步相信無可疑。]]></description>
25
+ <guid isPermaLink="false">yahoo/hk/news/591558</guid>
26
+ <pubDate>Sun, 14 Jun 2009 00:15:05 +0800</pubDate>
27
+ </item>
28
+ <item>
29
+ <title><![CDATA[本港新增十一宗新流感個案]]></title>
30
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/cog1.html]]></link>
31
+ <description><![CDATA[衛生署公布,是日新增11宗甲型H1N1流感確診個案,香港至今共錄得84宗病例。]]></description>
32
+ <guid isPermaLink="false">yahoo/hk/news/591553</guid>
33
+ <pubDate>Sat, 13 Jun 2009 23:15:05 +0800</pubDate>
34
+
35
+ </item>
36
+ <item>
37
+ <title><![CDATA[旺角車禍死者家人矢言追究]]></title>
38
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/cofo.html]]></link>
39
+ <description><![CDATA[旺角周五深夜發生的小巴與巴士相撞後剷上行人路車禍,死者家屬誓言追究,而事故現場經常見到小巴與巴士爭路。]]></description>
40
+ <guid isPermaLink="false">yahoo/hk/news/591540</guid>
41
+ <pubDate>Sat, 13 Jun 2009 22:20:04 +0800</pubDate>
42
+ </item>
43
+ <item>
44
+ <title><![CDATA[本港再確診五宗新流感]]></title>
45
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coel.html]]></link>
46
+ <description><![CDATA[本港確診多5宗甲型H1N1流感,令本港的確診個升至78宗,其中4宗屬外地傳入,一宗未分類。]]></description>
47
+ <guid isPermaLink="false">yahoo/hk/news/591501</guid>
48
+ <pubDate>Sat, 13 Jun 2009 22:20:04 +0800</pubDate>
49
+
50
+ </item>
51
+ <item>
52
+ <title><![CDATA[柴灣起卸區撈獲老翁浮屍]]></title>
53
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/coft.html]]></link>
54
+ <description><![CDATA[一名年約七十歲老翁,下午被市民發現浮屍柴灣公眾貨物起卸區對開,警方聯同消防員接報到場,將年老浮屍撈上岸邊,警員未能在其身上尋獲任何身分證明文件,警員正追查浮屍者的背景及墮海原因。]]></description>
55
+ <guid isPermaLink="false">yahoo/hk/news/591545</guid>
56
+ <pubDate>Sat, 13 Jun 2009 21:33:29 +0800</pubDate>
57
+ </item>
58
+ <item>
59
+ <title><![CDATA[觀塘社區中心翻新後重開]]></title>
60
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/cofs.html]]></link>
61
+ <description><![CDATA[觀塘社區中心改善工程己經竣工,內容包括擴建禮堂和舞台、改善音響及燈光器材、更新冷氣系統及增設休憩花園等。經全面翻新後的社區中心今日正式重新啟用,為區內市民提供一個可舉辦各類型表演的理想社區活動場地。]]></description>
62
+ <guid isPermaLink="false">yahoo/hk/news/591544</guid>
63
+ <pubDate>Sat, 13 Jun 2009 21:20:29 +0800</pubDate>
64
+
65
+ </item>
66
+ <item>
67
+ <title><![CDATA[警籲市民提供柴灣致命車禍資料]]></title>
68
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/cofr.html]]></link>
69
+ <description><![CDATA[警方港島總區交通部特別調查隊,正調查今午在柴灣發生的一宗交通意外,意外中一名七十四歲老翁死亡。任何人如曾目睹意外經過或有資料提供,請致電31068800或31068833與調查人員聯絡。]]></description>
70
+ <guid isPermaLink="false">yahoo/hk/news/591543</guid>
71
+ <pubDate>Sat, 13 Jun 2009 21:09:28 +0800</pubDate>
72
+ </item>
73
+ <item>
74
+ <title><![CDATA[旺角嚴重車禍司機危駕保釋]]></title>
75
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coc9.html]]></link>
76
+ <description><![CDATA[旺角昨晚深夜一輛小巴與巴士相撞後剷上行人路,造成2死7傷,34歲小巴司機被控危險駕駛,今早獲准保釋。]]></description>
77
+ <guid isPermaLink="false">yahoo/hk/news/591417</guid>
78
+ <pubDate>Sat, 13 Jun 2009 21:05:03 +0800</pubDate>
79
+
80
+ </item>
81
+ <item>
82
+ <title><![CDATA[四千四百多隻活豬今運抵屠房]]></title>
83
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/cofq.html]]></link>
84
+ <description><![CDATA[今日運抵屠房的活豬數目為四千四百四十六隻,當中四千一百卅六隻為內地進口活豬,三百一十隻為本地豬。活豬批發價介乎每擔爪百五十至,一千一百一十五元,平均價為九百五十一元。]]></description>
85
+ <guid isPermaLink="false">yahoo/hk/news/591542</guid>
86
+ <pubDate>Sat, 13 Jun 2009 21:01:29 +0800</pubDate>
87
+ </item>
88
+ <item>
89
+ <title><![CDATA[警方尖沙咀的士高拘四毒販]]></title>
90
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/cofp.html]]></link>
91
+ <description><![CDATA[警方接獲線報,一個販毒集團在尖沙咀麼地道的一間的士高販賣精神科毒品。毒品調查科探員在五月展開一項代號「House Painter」的行動,鎖定該販毒集團的三名成員。]]></description>
92
+ <guid isPermaLink="false">yahoo/hk/news/591541</guid>
93
+ <pubDate>Sat, 13 Jun 2009 20:56:28 +0800</pubDate>
94
+
95
+ </item>
96
+ <item>
97
+ <title><![CDATA[柴灣車禍老伯死亡]]></title>
98
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coez.html]]></link>
99
+ <description><![CDATA[柴灣嘉業街下午五時許發生車禍,一名74歲老伯被輕型貨車撞倒,送院後證實死亡。]]></description>
100
+ <guid isPermaLink="false">yahoo/hk/news/591515</guid>
101
+ <pubDate>Sat, 13 Jun 2009 20:20:03 +0800</pubDate>
102
+ </item>
103
+ <item>
104
+ <title><![CDATA[旺角車禍死者家人促徹查]]></title>
105
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coei.html]]></link>
106
+ <description><![CDATA[旺角道昨晚深夜造成兩人死亡的嚴重車禍,死者的家人在正午路祭。]]></description>
107
+ <guid isPermaLink="false">yahoo/hk/news/591498</guid>
108
+ <pubDate>Sat, 13 Jun 2009 20:20:03 +0800</pubDate>
109
+
110
+ </item>
111
+ <item>
112
+ <title><![CDATA[警方在尖沙嘴拘捕四毒販]]></title>
113
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/cofb.html]]></link>
114
+ <description><![CDATA[警方於上午執行一項反毒品行動時,在尖沙嘴一間的士高拘捕四名涉嫌販毒男子。]]></description>
115
+ <guid isPermaLink="false">yahoo/hk/news/591527</guid>
116
+ <pubDate>Sat, 13 Jun 2009 19:35:03 +0800</pubDate>
117
+ </item>
118
+ <item>
119
+ <title><![CDATA[旺角釀大車禍小巴司機獲准保釋]]></title>
120
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/cofc.html]]></link>
121
+ <description><![CDATA[釀成兩死八傷車禍的卅四歲專線小巴司機,因涉嫌危險駕駛引致他人死亡一度被捕,下午已獲准以一萬元保釋,下周須到警署報到。]]></description>
122
+ <guid isPermaLink="false">yahoo/hk/news/591528</guid>
123
+ <pubDate>Sat, 13 Jun 2009 19:08:29 +0800</pubDate>
124
+
125
+ </item>
126
+ <item>
127
+ <title><![CDATA[流感診所首日治二百多人]]></title>
128
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/cof0.html]]></link>
129
+ <description><![CDATA[醫管局轄下八間指定流感診所今日正式服務,首日運作暢順,八間診所合共為236名患有流感徵狀的市民診治。]]></description>
130
+ <guid isPermaLink="false">yahoo/hk/news/591516</guid>
131
+ <pubDate>Sat, 13 Jun 2009 18:55:04 +0800</pubDate>
132
+ </item>
133
+ <item>
134
+ <title><![CDATA[港學生多認同中國人身分]]></title>
135
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coey.html]]></link>
136
+ <description><![CDATA[國民教育中心首次全港學校調查顯示,香港中小學生多認同中國人的身分。]]></description>
137
+ <guid isPermaLink="false">yahoo/hk/news/591514</guid>
138
+ <pubDate>Sat, 13 Jun 2009 18:35:04 +0800</pubDate>
139
+
140
+ </item>
141
+ <item>
142
+ <title><![CDATA[今新確診女子曾到過尖沙嘴]]></title>
143
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coex.html]]></link>
144
+ <description><![CDATA[曾到過江西及廣州的確診女子,病發前曾到過尖沙嘴星光大道、尖沙嘴中心等地,傳播病毒機會低。]]></description>
145
+ <guid isPermaLink="false">yahoo/hk/news/591513</guid>
146
+ <pubDate>Sat, 13 Jun 2009 18:25:05 +0800</pubDate>
147
+ </item>
148
+ <item>
149
+ <title><![CDATA[曾浩輝指流感診所秩序良好]]></title>
150
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coer.html]]></link>
151
+ <description><![CDATA[衛生防護中心總監曾浩輝表示,首天開放的指定流感診所整體秩序良好。]]></description>
152
+ <guid isPermaLink="false">yahoo/hk/news/591507</guid>
153
+ <pubDate>Sat, 13 Jun 2009 18:10:07 +0800</pubDate>
154
+
155
+ </item>
156
+ <item>
157
+ <title><![CDATA[曾浩輝稱已訂更多抗流感藥]]></title>
158
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/4/coep.html]]></link>
159
+ <description><![CDATA[衛生防護中心總監曾浩輝表示,有鑑於現時本港甲型H1N1流感疫情有變,當局已增購抗流感藥物如特敏福。]]></description>
160
+ <guid isPermaLink="false">yahoo/hk/news/591505</guid>
161
+ <pubDate>Sat, 13 Jun 2009 18:00:09 +0800</pubDate>
162
+ </item>
163
+ <item>
164
+ <title><![CDATA[5宗H1N14宗屬外地傳入]]></title>
165
+ <link><![CDATA[http://hk.rd.yahoo.com/news/rss/*http://hk.news.yahoo.com/article/090613/3/coeo.html]]></link>
166
+ <description><![CDATA[本港再確診5宗H1N1甲型流感(人類豬流感)個案,累計確診個案增至78宗。]]></description>
167
+ <guid isPermaLink="false">yahoo/hk/news/591504</guid>
168
+ <pubDate>Sat, 13 Jun 2009 17:24:29 +0800</pubDate>
169
+
170
+ </item>
171
+ </channel>
172
+ </rss>
173
+ <!-- spaceId: 97097717 -->