zetaben-Html2Feedbooks 0.2.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/app.rb +28 -4
- data/lib/feedbooks.rb +44 -21
- data/lib/parser.rb +5 -4
- metadata +1 -1
data/lib/app.rb
CHANGED
@@ -3,6 +3,15 @@ require 'open-uri'
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'time'
|
5
5
|
require 'htmlentities'
|
6
|
+
=begin
|
7
|
+
def colour(text, colour_code)
|
8
|
+
"#{colour_code}#{text}\e[0m"
|
9
|
+
end
|
10
|
+
def green(text); colour(text, "\e[32m"); end
|
11
|
+
def red(text); colour(text, "\e[31m"); end
|
12
|
+
def yellow(text); colour(text, "\e[33m"); end
|
13
|
+
def blue(text); colour(text, "\e[34m"); end
|
14
|
+
=end
|
6
15
|
|
7
16
|
class AtomPost
|
8
17
|
attr_accessor :title
|
@@ -12,15 +21,30 @@ class AtomPost
|
|
12
21
|
attr_accessor :addr
|
13
22
|
attr_accessor :user
|
14
23
|
attr_accessor :pass
|
24
|
+
attr_accessor :type
|
15
25
|
|
16
26
|
def initialize(addrs=nil)
|
17
27
|
self.addr=addrs unless addrs.nil?
|
18
28
|
end
|
19
29
|
|
30
|
+
def down_url(entry_url)
|
31
|
+
#STDERR.puts "scanning #{entry_url}"
|
32
|
+
url=URI.parse(entry_url)
|
33
|
+
Net::HTTP.start(url.host,url.port) {|http|
|
34
|
+
req = Net::HTTP::Get.new(url.path)
|
35
|
+
req.basic_auth user,pass unless user.nil?
|
36
|
+
response = http.request(req)
|
37
|
+
doc=Hpricot(response.body)
|
38
|
+
e=doc.at('//entry').at('link[@rel="down"]')
|
39
|
+
return URI.parse(e[:href]).path unless e.nil?
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
20
43
|
def send
|
21
44
|
raise StandardError.new('Missing Address') if addr.nil?
|
22
45
|
#3: Detailed control
|
23
46
|
url = URI.parse(addr)
|
47
|
+
#STDERR.puts "sending to #{url}"
|
24
48
|
req = Net::HTTP::Post.new(url.path)
|
25
49
|
req.basic_auth user,pass unless user.nil?
|
26
50
|
|
@@ -31,18 +55,18 @@ class AtomPost
|
|
31
55
|
req.body +='<updated>'+date.xmlschema+'</updated>'+"\n"
|
32
56
|
req.body +='<author><name>'+author+'</name></author>'+"\n"
|
33
57
|
req.body +='<content>'+recode_text(content)+'</content>'+"\n"
|
58
|
+
req.body +='<category label="'+type+'" term="'+type+'" />'+"\n" unless type.nil?
|
34
59
|
req.body +='</entry>'+"\n"
|
35
60
|
|
36
61
|
req.set_content_type('application/atom+xml;type=entry')
|
37
62
|
|
38
|
-
|
39
|
-
f << req.body
|
40
|
-
end
|
63
|
+
# STDERR.puts red("Send \n #{req.body.size > 500 ? req.body[0..250]+'[...]'+req.body[-250..-1]: req.body}")
|
41
64
|
|
42
65
|
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
|
43
66
|
case res
|
44
67
|
when Net::HTTPSuccess, Net::HTTPRedirection
|
45
|
-
|
68
|
+
# STDERR.puts green(res['location']) if res['location']
|
69
|
+
res['location'] if res['location']
|
46
70
|
else
|
47
71
|
res.error!
|
48
72
|
end
|
data/lib/feedbooks.rb
CHANGED
@@ -42,51 +42,74 @@ module HTML2FB
|
|
42
42
|
def to_feedbooks(conf)
|
43
43
|
FBSession.new(conf)
|
44
44
|
#File.open('/tmp/test3.html','w') do |f|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
content.each do |e|
|
46
|
+
# f << e.to_feedbooks(conf)
|
47
|
+
e.to_feedbooks(conf,nil)
|
48
|
+
# f << " \n " * 10
|
49
|
+
end
|
50
50
|
#end
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
class
|
55
|
-
|
56
|
-
|
57
|
-
puts "Sending to feedbooks"
|
54
|
+
class FBPost
|
55
|
+
def self.push(conf,tit,cont,type,path=nil)
|
56
|
+
puts "Sending to feedbooks #{tit}"
|
58
57
|
fb=FBSession.session
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
e.stag.name='xhtml:'+e.stag.name
|
64
|
-
e.etag.name='xhtml:'+e.etag.name unless e.etag.nil?
|
65
|
-
end
|
58
|
+
if path.nil?
|
59
|
+
post=AtomPost.new "http://#{fb.host}/#{fb.booktype}/#{fb.bookid}/contents.atom"
|
60
|
+
else
|
61
|
+
post=AtomPost.new "http://#{fb.host}#{path}"
|
66
62
|
end
|
67
|
-
|
63
|
+
|
64
|
+
post.content=cont
|
68
65
|
post.user=fb.user
|
69
66
|
post.pass=fb.pass
|
70
67
|
post.date=Time.now
|
71
68
|
post.author=fb.user
|
72
|
-
post.title=
|
73
|
-
post.
|
69
|
+
post.title=tit
|
70
|
+
post.type=type
|
71
|
+
s=post.send
|
72
|
+
post.down_url(s) unless s.nil?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class Section
|
77
|
+
@@level=0
|
78
|
+
@@types=['Part','Chapter','Section']
|
79
|
+
def to_feedbooks(conf,path=nil)
|
80
|
+
fbpath=FBPost.push(conf,title,'',@@types[@@level]||@@types[-1],path)
|
81
|
+
@@level+=1
|
82
|
+
content.each do |e|
|
83
|
+
e.to_feedbooks(conf,fbpath)
|
84
|
+
end
|
85
|
+
@@level-=1
|
74
86
|
end
|
75
87
|
|
76
88
|
alias :old_to_html :to_html
|
77
89
|
|
78
90
|
def to_html
|
79
91
|
ret=nil
|
80
|
-
@@level+=1
|
81
92
|
if @@level==1
|
82
93
|
ret=old_to_html
|
83
94
|
else
|
84
95
|
ret="<h#{@@level+1}>"+title+"</h#{@@level+1}>"+old_to_html
|
85
96
|
end
|
86
|
-
@@level-=1
|
87
97
|
ret
|
88
98
|
end
|
89
99
|
end
|
100
|
+
|
101
|
+
class Text
|
102
|
+
def to_feedbooks(conf,path=nil)
|
103
|
+
doc=Hpricot('<div xmlns:xhtml="http://www.w3.org/1999/xhtml">'+to_html+'</div>')
|
104
|
+
doc.traverse_all_element do |e|
|
105
|
+
unless e.is_a?Hpricot::Text
|
106
|
+
e.stag.name='xhtml:'+e.stag.name
|
107
|
+
e.etag.name='xhtml:'+e.etag.name unless e.etag.nil?
|
108
|
+
end
|
109
|
+
end
|
110
|
+
FBPost.push(conf,'',doc.to_html,"Text",path)
|
111
|
+
end
|
112
|
+
end
|
90
113
|
end
|
91
114
|
|
92
115
|
def ask(txt,disp='Prompt')
|
data/lib/parser.rb
CHANGED
@@ -75,7 +75,7 @@ module HTML2FB
|
|
75
75
|
|
76
76
|
tit.each do |a|
|
77
77
|
s=Section.new
|
78
|
-
tmp=doc.between(a.first.xpath,a.last.nil? ? nil : a.last.xpath).
|
78
|
+
tmp=doc.between(a.first.xpath,a.last.nil? ? nil : a.last.xpath).collect{|r| r.to_original_html}.join
|
79
79
|
tmp.sub!(a.first.to_original_html,'')
|
80
80
|
s.content =[Text.new(tmp)]
|
81
81
|
#buggy with entities
|
@@ -106,11 +106,12 @@ module HTML2FB
|
|
106
106
|
|
107
107
|
tit.each do |a|
|
108
108
|
s=Section.new
|
109
|
-
tmp=doc.between(a.first.xpath,a.last.nil? ? nil : a.last.xpath).
|
110
|
-
|
109
|
+
tmp=doc.between(a.first.xpath,a.last.nil? ? nil : a.last.xpath).collect{|r| r.to_original_html}
|
110
|
+
|
111
|
+
s.content = [Text.new(tmp.join)]
|
111
112
|
s.title = extract_text(a.first)
|
112
113
|
el.content.push s
|
113
|
-
l.content.sub!(
|
114
|
+
tmp.each{|t|l.content.sub!(t,'')}
|
114
115
|
l.content.sub!(a.first.to_original_html,'')
|
115
116
|
end
|
116
117
|
|