epub_book 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +35 -18
- data/exe/create_book +3 -10
- data/lib/epub_book/book.rb +25 -12
- data/lib/epub_book/mailer.rb +0 -14
- data/lib/epub_book/version.rb +1 -1
- data/lib/epub_book.rb +44 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6576163ae0d036a05da85d98b83375314ca8de30
|
4
|
+
data.tar.gz: fbf0608c5fd2db1cb122386b9f76be697a98f4d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3d76543d588dfdc76a48b38133127081338ea0adba5fed4c1d630c167da624bb155bf87ac26da9befb598e5c6289eb55d858406f7fb0e3e2e6b6b501b1fd735
|
7
|
+
data.tar.gz: 995f91d7e0138583c4012920c69d6c1e5c3912ab91ba7f6a238410cb4663944ab9c6849485a547f13858cfd8b7a1f97ed9a9dde20ee0d426f774ee5b5def1801
|
data/README.md
CHANGED
@@ -19,11 +19,27 @@ Or install it yourself as:
|
|
19
19
|
$ gem install epub_book
|
20
20
|
|
21
21
|
## Usage
|
22
|
+
### create book
|
23
|
+
```ruby
|
24
|
+
EpubBook.create_book(book_url,bookname, des_url) do |book|
|
25
|
+
book.cover_css = '.pic_txt_list .pic img'
|
26
|
+
book.description_css = '.box p.description'
|
27
|
+
book.title_css = '.pic_txt_list h3 span'
|
28
|
+
book.index_item_css = 'ul.list li.c3 a'
|
29
|
+
book.body_css = '.wrapper #content'
|
30
|
+
book.creator = 'javy_liu'
|
31
|
+
book.path = '/tmp'
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
22
35
|
|
23
|
-
Setting
|
36
|
+
###use Setting
|
24
37
|
```ruby
|
25
|
-
#
|
38
|
+
#default setting, this setting is prior the default_setting.yml
|
26
39
|
EpubBook.configure do |config|
|
40
|
+
#if not set,it will use `pwd`/default_setting.yml
|
41
|
+
config.setting_file = "./default_setting.yml"
|
42
|
+
#you can set following setting in default_setting.yml
|
27
43
|
config.mail_address = 'smtp.example.com'
|
28
44
|
config.mail_user_name = 'ex@example.com'
|
29
45
|
config.mail_password = 'password'
|
@@ -42,6 +58,7 @@ Or use a ./default_setting.yml file have following content
|
|
42
58
|
mail_user_name: smpt_mail@example.com
|
43
59
|
mail_password: smpt_pwd
|
44
60
|
|
61
|
+
#default book setting
|
45
62
|
book:
|
46
63
|
limit: 10
|
47
64
|
cover_css: '.pic_txt_list .pic img'
|
@@ -52,33 +69,33 @@ Or use a ./default_setting.yml file have following content
|
|
52
69
|
creator: 'user name'
|
53
70
|
path: '/'
|
54
71
|
mail_to: 'yourmail@example.com'
|
55
|
-
|
56
|
-
|
72
|
+
|
73
|
+
#special host book setting(the key is book_url's host which replacing the dot with underline)
|
74
|
+
www_piaotian_net:
|
75
|
+
cover_css: '.pic_txt_list .pic img'
|
76
|
+
description_css: '.box p.description'
|
77
|
+
title_css: '.pic_txt_list h3 span'
|
78
|
+
index_item_css: 'ul.list li.c3 a'
|
79
|
+
body_css: '.wrapper #content'
|
80
|
+
path: '/'
|
57
81
|
```
|
58
|
-
|
82
|
+
|
83
|
+
if you have setting file , you can create book like following
|
59
84
|
```ruby
|
60
|
-
EpubBook.create_book(book_url,bookname)
|
61
|
-
book.cover_css = '.pic_txt_list .pic img'
|
62
|
-
book.description_css = '.box p.description'
|
63
|
-
book.title_css = '.pic_txt_list h3 span'
|
64
|
-
book.index_item_css = 'ul.list li.c3 a'
|
65
|
-
book.body_css = '.wrapper #content'
|
66
|
-
book.creator = 'javy_liu'
|
67
|
-
book.path = '/home/oswap/ruby_test/epub_book/'
|
68
|
-
book.mail_to = ''
|
69
|
-
end
|
85
|
+
EpubBook.create_book(book_url,bookname, des_url)
|
70
86
|
```
|
71
87
|
|
72
88
|
## Parameter specification
|
73
89
|
```ruby
|
74
90
|
book_url(required): internal book index page url (this page may include the description or cover)
|
75
91
|
bookname(optional): created book file name, if not set ,it will use the Base64.url_encode(book_url)[-10,-2]
|
76
|
-
|
92
|
+
des_url(optional): if the book cover and book description is not in book_url catalog,you can set this for the cover and description
|
77
93
|
|
94
|
+
```
|
78
95
|
|
79
96
|
## Block parameter specification
|
80
97
|
```ruby
|
81
|
-
book.cover_css
|
98
|
+
book.cover_css #book cover image css path
|
82
99
|
book.description_css #book description css path
|
83
100
|
book.title_css #book title css path
|
84
101
|
book.index_item_css #book catalog item css path
|
@@ -89,7 +106,7 @@ Create book
|
|
89
106
|
```
|
90
107
|
## Perform `create_book` in your terminal
|
91
108
|
```bash
|
92
|
-
create_book
|
109
|
+
create_book(book_catalog_link, bookname)
|
93
110
|
```
|
94
111
|
## Development
|
95
112
|
|
data/exe/create_book
CHANGED
@@ -6,19 +6,12 @@ require 'yaml'
|
|
6
6
|
|
7
7
|
# use like
|
8
8
|
# bin/create_book http://www.quanben5.com/n/jinyiyexing/xiaoshuo.html bookname
|
9
|
-
url,bookname = ARGV
|
9
|
+
url,bookname,des_url = ARGV
|
10
10
|
|
11
|
-
default_config = YAML.load(File.open('./default_setting.yml'))
|
12
11
|
#smtp setting
|
13
12
|
EpubBook.configure do |config|
|
14
|
-
|
15
|
-
config.send("#{key}=",value)
|
16
|
-
end
|
13
|
+
config.setting_file = './default_setting.yml'
|
17
14
|
end
|
18
15
|
|
19
|
-
EpubBook.create_book(url
|
20
|
-
default_config['book'].each_pair do |key,value|
|
21
|
-
book.send("#{key}=",value)
|
22
|
-
end
|
23
|
-
end
|
16
|
+
EpubBook.create_book(url,bookname,des_url)
|
24
17
|
|
data/lib/epub_book/book.rb
CHANGED
@@ -27,8 +27,9 @@ module EpubBook
|
|
27
27
|
|
28
28
|
Reg = /<script.*?>.*?<\/script>/m
|
29
29
|
|
30
|
-
def initialize(index_url )
|
30
|
+
def initialize(index_url,des_url=nil )
|
31
31
|
@index_url = index_url
|
32
|
+
@des_url = des_url
|
32
33
|
@user_agent = UserAgent
|
33
34
|
@referer = Referer
|
34
35
|
@folder_name = Base64.urlsafe_encode64(Array(index_url).pack('P'))
|
@@ -98,6 +99,7 @@ module EpubBook
|
|
98
99
|
mailer = Mailer.new
|
99
100
|
mailer.to = mail_to
|
100
101
|
mailer.add_file epub_file
|
102
|
+
mailer.body = "您创建的电子书[#{book[:title]}]见附件\n"
|
101
103
|
|
102
104
|
mailer.send_mail
|
103
105
|
end
|
@@ -105,23 +107,17 @@ module EpubBook
|
|
105
107
|
end
|
106
108
|
|
107
109
|
|
110
|
+
#得到书目索引
|
108
111
|
def fetch_index(url=nil)
|
109
112
|
url ||= @index_url
|
110
113
|
doc = Nokogiri::HTML(open(URI.encode(url),"User-Agent" => @user_agent ,'Referer'=> @referer).read)
|
111
114
|
#generate index.yml
|
112
115
|
|
113
|
-
book[:title]
|
114
|
-
|
115
|
-
|
116
|
-
cover_url = doc.css(@cover_css).attr("src").to_s
|
117
|
-
cover_url = link_host + cover_url unless cover_url.start_with?("http")
|
118
|
-
system("curl #{cover_url} -o #{File.join(@book_path,@cover)} ")
|
119
|
-
book[:cover] = File.join(@book_path,@cover)
|
116
|
+
if !book[:title]
|
117
|
+
doc1 = @des_url.nil? ? doc : Nokogiri::HTML(open(URI.encode(des_url),"User-Agent" => @user_agent ,'Referer'=> @referer).read)
|
118
|
+
get_des(doc1)
|
120
119
|
end
|
121
120
|
|
122
|
-
if @description_css && !book[:description]
|
123
|
-
book[:description] = doc.css(@description_css).text
|
124
|
-
end
|
125
121
|
|
126
122
|
doc.css(@index_item_css).each do |item|
|
127
123
|
_href = URI.encode(item.attr(@item_attr).to_s)
|
@@ -142,7 +138,6 @@ module EpubBook
|
|
142
138
|
|
143
139
|
#保存书目
|
144
140
|
save_book
|
145
|
-
|
146
141
|
end
|
147
142
|
|
148
143
|
def fetch_book
|
@@ -175,6 +170,24 @@ module EpubBook
|
|
175
170
|
|
176
171
|
end
|
177
172
|
|
173
|
+
|
174
|
+
private
|
175
|
+
#得到书名,介绍,及封面
|
176
|
+
def get_des(doc)
|
177
|
+
book[:title] = doc.css(@title_css).text.strip
|
178
|
+
if @cover_css && !book[:cover]
|
179
|
+
cover_url = doc.css(@cover_css).attr("src").to_s
|
180
|
+
cover_url = link_host + cover_url unless cover_url.start_with?("http")
|
181
|
+
cover_path = File.join(@book_path,@cover)
|
182
|
+
system("curl #{cover_url} -o #{cover_path} ")
|
183
|
+
book[:cover] = cover_path
|
184
|
+
end
|
185
|
+
|
186
|
+
if @description_css && !book[:description]
|
187
|
+
book[:description] = doc.css(@description_css).text
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
178
191
|
end
|
179
192
|
|
180
193
|
end
|
data/lib/epub_book/mailer.rb
CHANGED
@@ -1,23 +1,9 @@
|
|
1
|
-
require 'mail'
|
2
|
-
|
3
1
|
module EpubBook
|
4
2
|
class Mailer
|
5
3
|
extend Forwardable
|
6
|
-
::Mail.defaults do
|
7
|
-
delivery_method :smtp, {
|
8
|
-
:address => EpubBook.config.mail_address,
|
9
|
-
:port => EpubBook.config.mail_port,
|
10
|
-
:user_name => EpubBook.config.mail_user_name,
|
11
|
-
:password => EpubBook.config.mail_password,
|
12
|
-
:authentication => :plain,
|
13
|
-
:enable_starttls_auto => true
|
14
|
-
}
|
15
|
-
end
|
16
4
|
|
17
5
|
def_delegators :@mailer, :from,:from=,:to,:to=,:subject,:subject=,:body,:body=,:add_file
|
18
6
|
|
19
|
-
|
20
|
-
|
21
7
|
def initialize
|
22
8
|
@mailer = Mail.new do
|
23
9
|
from EpubBook.config.mail_from
|
data/lib/epub_book/version.rb
CHANGED
data/lib/epub_book.rb
CHANGED
@@ -1,44 +1,41 @@
|
|
1
1
|
require "epub_book/version"
|
2
2
|
require 'epub_book/book'
|
3
|
+
require 'mail'
|
3
4
|
|
4
5
|
module EpubBook
|
5
6
|
# Your code goes here...
|
6
7
|
autoload :Book, "epub_book/book"
|
7
8
|
autoload :Mailer, "epub_book/mailer"
|
8
9
|
|
9
|
-
|
10
|
-
epub_book = Book.new(url,&block)
|
11
|
-
#do |book|
|
12
|
-
# book.limit = 5
|
13
|
-
# book.cover_css = '.pic_txt_list .pic img'
|
14
|
-
# book.description_css = '.box p.description'
|
15
|
-
# book.title_css = '.pic_txt_list h3 span'
|
16
|
-
# book.index_item_css = 'ul.list li.c3 a'
|
17
|
-
# book.body_css = '.wrapper #content'
|
18
|
-
# book.creator = 'javy_liu'
|
19
|
-
# book.path = '/home/oswap/ruby_test/epub_book/'
|
20
|
-
# book.user_agent = ''
|
21
|
-
# book.referer = ''
|
22
|
-
# book.mail_to = 'javy_liu@163.com'
|
23
|
-
#end
|
24
|
-
#epub_book.fetch_index
|
25
|
-
epub_book.generate_book(bookname)
|
26
|
-
end
|
27
|
-
|
28
|
-
Config = Struct.new(:mail_from,:mail_subject,:mail_body,:mail_address,:mail_port,:mail_user_name,:mail_password)
|
10
|
+
Config = Struct.new(:setting_file,:mail_from,:mail_subject,:mail_body,:mail_address,:mail_port,:mail_user_name,:mail_password)
|
29
11
|
class Config
|
30
12
|
include Singleton
|
31
13
|
def initialize
|
32
14
|
self.mail_subject = 'epub 电子书'
|
33
15
|
self.mail_body = "您创建的电子书见附件\n"
|
34
16
|
self.mail_port = 25
|
35
|
-
#mail_from
|
36
|
-
#mail_address
|
37
|
-
#mail_user_name
|
38
|
-
#mail_password
|
39
17
|
end
|
40
18
|
end
|
41
19
|
|
20
|
+
#book initialize, and the block will prior the yml setting
|
21
|
+
def self.create_book(url,bookname=nil,des_url=nil)
|
22
|
+
|
23
|
+
url_host_key = url[/\/\/(.*?)\//,1].tr(?.,'_')
|
24
|
+
|
25
|
+
epub_book = Book.new(url,des_url) do |book|
|
26
|
+
(default_config['book']||{}).merge(default_config[url_host_key]||{}).each_pair do |key,value|
|
27
|
+
book.send("#{key}=",value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
yield epub_book if block_given?
|
32
|
+
|
33
|
+
#epub_book.fetch_index
|
34
|
+
epub_book.generate_book(bookname)
|
35
|
+
|
36
|
+
epub_book
|
37
|
+
end
|
38
|
+
|
42
39
|
|
43
40
|
def self.config
|
44
41
|
Config.instance
|
@@ -47,4 +44,27 @@ module EpubBook
|
|
47
44
|
def self.configure
|
48
45
|
yield config
|
49
46
|
end
|
47
|
+
|
48
|
+
#you can set in configure block or default_setting.yml,and configure block prior the yml setting
|
49
|
+
def self.default_config
|
50
|
+
unless @default_config
|
51
|
+
@default_config= YAML.load(config.setting_file || File.open("#{`pwd`.strip}/default_setting.yml"))
|
52
|
+
configure do |_config|
|
53
|
+
@default_config['smtp_config'].each_pair do |key,value|
|
54
|
+
_config[key] ||= value
|
55
|
+
end
|
56
|
+
end
|
57
|
+
::Mail.defaults do
|
58
|
+
delivery_method :smtp, {
|
59
|
+
:address => EpubBook.config.mail_address,
|
60
|
+
:port => EpubBook.config.mail_port,
|
61
|
+
:user_name => EpubBook.config.mail_user_name,
|
62
|
+
:password => EpubBook.config.mail_password,
|
63
|
+
:authentication => :plain,
|
64
|
+
:enable_starttls_auto => true
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
@default_config
|
69
|
+
end
|
50
70
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epub_book
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- qmliu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|