bookscan 0.2.2 → 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/VERSION +1 -1
- data/bookscan.gemspec +2 -3
- data/lib/bookscan/book.rb +1 -0
- data/lib/bookscan/cache.rb +10 -3
- data/lib/bookscan/commands.rb +92 -78
- metadata +21 -21
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/bookscan.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bookscan}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Yoshihiro TAKAHARA"]
|
@@ -40,7 +40,7 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.homepage = %q{http://github.com/tumf/bookscan}
|
41
41
|
s.licenses = ["MIT"]
|
42
42
|
s.require_paths = ["lib"]
|
43
|
-
s.rubygems_version = %q{1.
|
43
|
+
s.rubygems_version = %q{1.4.2}
|
44
44
|
s.summary = %q{BookScan Scraper}
|
45
45
|
s.test_files = [
|
46
46
|
"test/helper.rb",
|
@@ -48,7 +48,6 @@ Gem::Specification.new do |s|
|
|
48
48
|
]
|
49
49
|
|
50
50
|
if s.respond_to? :specification_version then
|
51
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
52
51
|
s.specification_version = 3
|
53
52
|
|
54
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
data/lib/bookscan/book.rb
CHANGED
data/lib/bookscan/cache.rb
CHANGED
@@ -19,7 +19,14 @@ module Bookscan
|
|
19
19
|
transaction do |ps|
|
20
20
|
ts = ps["tuned"]
|
21
21
|
end
|
22
|
-
|
22
|
+
ts_uniq = Books.new
|
23
|
+
ts.each { |t|
|
24
|
+
unless ts_uniq.find { |i| i.title == t.title }
|
25
|
+
ts_uniq << t
|
26
|
+
end
|
27
|
+
}
|
28
|
+
require 'pp'
|
29
|
+
return ts_uniq.compact
|
23
30
|
end
|
24
31
|
|
25
32
|
def tuned?(book,type)
|
@@ -34,9 +41,9 @@ module Bookscan
|
|
34
41
|
else
|
35
42
|
bs = Books.new
|
36
43
|
groups.each do |g|
|
37
|
-
bs
|
44
|
+
g.books.each { |b| bs << b }
|
38
45
|
end
|
39
|
-
bs
|
46
|
+
return bs
|
40
47
|
end
|
41
48
|
end
|
42
49
|
|
data/lib/bookscan/commands.rb
CHANGED
@@ -109,70 +109,13 @@ module Bookscan
|
|
109
109
|
hash = v
|
110
110
|
end
|
111
111
|
opt.parse!(@command_options)
|
112
|
-
|
113
|
-
unless hash
|
114
|
-
puts gs.to_s
|
115
|
-
hash = ask('Enter hash: ',gs.hashes) do |q|
|
116
|
-
q.validate = /\w+/
|
117
|
-
q.readline = true
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
g = gs.by_hash(hash)
|
122
|
-
puts g.books.to_s
|
123
|
-
end
|
124
|
-
|
125
|
-
def ask_tuned_book_id(book_id,type)
|
126
|
-
unless type
|
127
|
-
type = ask('Enter tune type: ',TUNE_TYPES) do |q|
|
128
|
-
q.validate = /\w+/
|
129
|
-
q.readline = true
|
130
|
-
end
|
131
|
-
end
|
132
|
-
ts = @cache.tuned
|
133
|
-
ts.collect! do |i|
|
134
|
-
i if i.tune_type == type
|
135
|
-
end.compact!
|
136
|
-
raise "No tuned in cache. Exceute 'bookscan update' first." unless ts.length > 0
|
137
|
-
unless book_id
|
138
|
-
puts ts.to_s
|
139
|
-
book_id = ask('Enter book id: ',ts.ids) do |q|
|
140
|
-
q.validate = /\w+/
|
141
|
-
q.readline = true
|
142
|
-
end
|
143
|
-
end
|
144
|
-
ts.by_id(book_id)
|
145
|
-
end
|
146
|
-
|
147
|
-
def ask_book_id(book_id,hash)
|
148
|
-
gs = @cache.groups
|
149
|
-
unless book_id
|
150
|
-
unless hash
|
151
|
-
puts gs.to_s
|
152
|
-
hash = ask('Enter hash: ',gs.hashes) do |q|
|
153
|
-
q.validate = /\w+/
|
154
|
-
q.readline = true
|
155
|
-
end
|
156
|
-
g = gs.by_hash(hash)
|
157
|
-
|
158
|
-
puts g.books.to_s
|
159
|
-
|
160
|
-
book_id = ask('Enter book id: ',g.books.ids) do |q|
|
161
|
-
q.validate = /\w+/
|
162
|
-
q.readline = true
|
163
|
-
end
|
164
|
-
|
165
|
-
end
|
166
|
-
end
|
167
|
-
gs.book(book_id)
|
112
|
+
puts ask_group(hash,gs).books.to_s
|
168
113
|
end
|
169
114
|
|
170
115
|
def download
|
171
116
|
opt = OptionParser.new
|
172
117
|
directory = "."
|
173
|
-
hash = nil
|
174
|
-
type = nil
|
175
|
-
dry_run = false
|
118
|
+
hash = nil;type = nil;pattern = ".*"; dry_run = false
|
176
119
|
opt.on('-d DIR','--directory=DIR', 'download directory') do |v|
|
177
120
|
directory = v
|
178
121
|
end
|
@@ -182,6 +125,9 @@ module Bookscan
|
|
182
125
|
opt.on('-t TYPE','--tuned=TYPE', 'download tuned') do |v|
|
183
126
|
type = v
|
184
127
|
end
|
128
|
+
opt.on('-m PATTERN','--match=PATTERN','pattern match') do |v|
|
129
|
+
pattern = v
|
130
|
+
end
|
185
131
|
opt.on('--dry-run', 'dry-run mode') do |v|
|
186
132
|
dry_run = true
|
187
133
|
end
|
@@ -190,9 +136,13 @@ module Bookscan
|
|
190
136
|
|
191
137
|
if book_id == "all"
|
192
138
|
if type
|
193
|
-
bs = @cache.tuned
|
139
|
+
bs = @cache.tuned.select { |i|
|
140
|
+
/#{pattern}/ =~ i.title
|
141
|
+
}
|
194
142
|
else
|
195
|
-
bs = @cache.books
|
143
|
+
bs = @cache.books.select { |i|
|
144
|
+
/#{pattern}/ =~ i.title
|
145
|
+
}
|
196
146
|
end
|
197
147
|
bs.each { |book|
|
198
148
|
next unless book.tune_type == type
|
@@ -207,9 +157,9 @@ module Bookscan
|
|
207
157
|
}
|
208
158
|
else
|
209
159
|
if type
|
210
|
-
book = ask_tuned_book_id(book_id,type)
|
160
|
+
book = ask_tuned_book_id(book_id,type,pattern)
|
211
161
|
else
|
212
|
-
book = ask_book_id(book_id,hash)
|
162
|
+
book = ask_book_id(book_id,hash,pattern)
|
213
163
|
end
|
214
164
|
|
215
165
|
# download
|
@@ -225,38 +175,32 @@ module Bookscan
|
|
225
175
|
|
226
176
|
def tune
|
227
177
|
opt = OptionParser.new
|
228
|
-
hash = nil
|
229
|
-
dry_run = false
|
178
|
+
hash = nil; pattern = ".*"; dry_run = false
|
230
179
|
opt.on('-g HASH','--group=HASH', 'group hash') do |v|
|
231
180
|
hash = v
|
232
181
|
end
|
233
182
|
opt.on('--dry-run', 'dry-run mode') do |v|
|
234
183
|
dry_run = true
|
235
184
|
end
|
185
|
+
opt.on('-m PATTERN','--match=PATTERN','pattern match') do |v|
|
186
|
+
pattern = v
|
187
|
+
end
|
236
188
|
opt.parse!(@command_options)
|
237
189
|
book_id = @command_options.shift
|
238
|
-
type =
|
239
|
-
unless type
|
240
|
-
type = ask('Enter tune type: ',TUNE_TYPES) do |q|
|
241
|
-
q.validate = /\w+/
|
242
|
-
q.readline = true
|
243
|
-
end
|
244
|
-
end
|
190
|
+
type = ask_tune_type(@command_options.shift)
|
245
191
|
|
246
192
|
if book_id == "all"
|
247
193
|
tuned = @cache.tuned
|
248
|
-
|
249
|
-
|
194
|
+
@cache.books.each { |book|
|
195
|
+
next unless /#{pattern}/ =~ book.title
|
250
196
|
unless @cache.tuned?(book,type)
|
251
197
|
# tune
|
252
|
-
unless dry_run
|
253
|
-
start
|
254
|
-
end
|
198
|
+
start unless dry_run
|
255
199
|
puts "tune for %s: %s" % [type, book.title] if dry_run or @agent.tune(book,type)
|
256
200
|
end
|
257
201
|
}
|
258
202
|
else
|
259
|
-
book = ask_book_id(book_id,hash)
|
203
|
+
book = ask_book_id(book_id,hash,pattern)
|
260
204
|
# tune
|
261
205
|
puts "tune for %s: %s" % [type, book.title]
|
262
206
|
unless dry_run
|
@@ -276,5 +220,75 @@ module Bookscan
|
|
276
220
|
puts @cache.tuned.to_s
|
277
221
|
end
|
278
222
|
|
223
|
+
private
|
224
|
+
|
225
|
+
def ask_group(hash,gs)
|
226
|
+
unless hash
|
227
|
+
puts gs.to_s
|
228
|
+
hash = ask('Enter hash ([q]uit): ',gs.hashes << 'q') do |q|
|
229
|
+
q.validate = /\w+/
|
230
|
+
q.readline = true
|
231
|
+
end
|
232
|
+
end
|
233
|
+
raise SystemExit if hash == "q"
|
234
|
+
|
235
|
+
gs.by_hash(hash)
|
236
|
+
end
|
237
|
+
|
238
|
+
def ask_tune_type(type)
|
239
|
+
unless type
|
240
|
+
type = ask('Enter tune type ([q]uit): ',TUNE_TYPES.clone << 'q') do |q|
|
241
|
+
q.validate = /\w+/
|
242
|
+
q.readline = true
|
243
|
+
end
|
244
|
+
end
|
245
|
+
raise SystemExit if type == "q"
|
246
|
+
type
|
247
|
+
end
|
248
|
+
|
249
|
+
def ask_tuned_book_id(book_id,type,pattern)
|
250
|
+
type = ask_tune_type(type)
|
251
|
+
|
252
|
+
ts = @cache.tuned.delete_if do |i|
|
253
|
+
i.tune_type != type
|
254
|
+
end
|
255
|
+
|
256
|
+
raise "No tuned in cache. Exceute 'bookscan update' first." unless ts.length > 0
|
257
|
+
return ask_book_id_pattern(book_id,ts,pattern)
|
258
|
+
end
|
259
|
+
|
260
|
+
def ask_book_id_pattern(book_id,books,pattern)
|
261
|
+
bs = books.clone.delete_if { |i|
|
262
|
+
!(/#{pattern}/ =~ i.title)
|
263
|
+
}
|
264
|
+
unless book_id
|
265
|
+
puts bs.to_s
|
266
|
+
book_id = ask('Enter book id ([q]uit): ',bs.ids << 'q') do |q|
|
267
|
+
q.validate = /\w+/
|
268
|
+
q.readline = true
|
269
|
+
end
|
270
|
+
raise SystemExit if book_id == "q"
|
271
|
+
end
|
272
|
+
bs.by_id(book_id)
|
273
|
+
end
|
274
|
+
|
275
|
+
def ask_book_id(book_id,hash,pattern)
|
276
|
+
unless pattern == ".*"
|
277
|
+
return ask_book_id_pattern(book_id,@cache.books,pattern)
|
278
|
+
end
|
279
|
+
|
280
|
+
gs = @cache.groups
|
281
|
+
unless book_id
|
282
|
+
g = ask_group(hash,gs)
|
283
|
+
puts g.books.to_s
|
284
|
+
book_id = ask('Enter book id ([q]uit): ',g.books.ids << 'q') do |q|
|
285
|
+
q.validate = /\w+/
|
286
|
+
q.readline = true
|
287
|
+
end
|
288
|
+
raise SystemExit if book_id == "q"
|
289
|
+
end
|
290
|
+
gs.book(book_id)
|
291
|
+
end
|
292
|
+
|
279
293
|
end
|
280
294
|
end
|
metadata
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
name: bookscan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
hash: 19
|
5
|
-
prerelease:
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yoshihiro TAKAHARA
|
@@ -19,7 +19,7 @@ date: 2011-01-19 00:00:00 +09:00
|
|
19
19
|
default_executable: bookscan
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
22
|
+
type: :development
|
23
23
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
@@ -30,10 +30,10 @@ dependencies:
|
|
30
30
|
- 0
|
31
31
|
version: "0"
|
32
32
|
requirement: *id001
|
33
|
+
prerelease: false
|
33
34
|
name: shoulda
|
34
|
-
type: :development
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
36
|
+
type: :development
|
37
37
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
38
|
none: false
|
39
39
|
requirements:
|
@@ -46,10 +46,10 @@ dependencies:
|
|
46
46
|
- 0
|
47
47
|
version: 1.0.0
|
48
48
|
requirement: *id002
|
49
|
+
prerelease: false
|
49
50
|
name: bundler
|
50
|
-
type: :development
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
-
|
52
|
+
type: :development
|
53
53
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
54
|
none: false
|
55
55
|
requirements:
|
@@ -62,10 +62,10 @@ dependencies:
|
|
62
62
|
- 2
|
63
63
|
version: 1.5.2
|
64
64
|
requirement: *id003
|
65
|
+
prerelease: false
|
65
66
|
name: jeweler
|
66
|
-
type: :development
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
-
|
68
|
+
type: :development
|
69
69
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
70
70
|
none: false
|
71
71
|
requirements:
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
- 0
|
77
77
|
version: "0"
|
78
78
|
requirement: *id004
|
79
|
+
prerelease: false
|
79
80
|
name: rcov
|
80
|
-
type: :development
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
|
82
|
+
type: :runtime
|
83
83
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
@@ -90,10 +90,10 @@ dependencies:
|
|
90
90
|
- 0
|
91
91
|
version: "0"
|
92
92
|
requirement: *id005
|
93
|
+
prerelease: false
|
93
94
|
name: mutter
|
94
|
-
type: :runtime
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
|
-
|
96
|
+
type: :runtime
|
97
97
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
98
98
|
none: false
|
99
99
|
requirements:
|
@@ -105,10 +105,10 @@ dependencies:
|
|
105
105
|
- 1
|
106
106
|
version: "0.1"
|
107
107
|
requirement: *id006
|
108
|
+
prerelease: false
|
108
109
|
name: keystorage
|
109
|
-
type: :runtime
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
|
-
|
111
|
+
type: :runtime
|
112
112
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -121,10 +121,10 @@ dependencies:
|
|
121
121
|
- 0
|
122
122
|
version: 1.0.0
|
123
123
|
requirement: *id007
|
124
|
+
prerelease: false
|
124
125
|
name: mechanize
|
125
|
-
type: :runtime
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
|
127
|
+
type: :runtime
|
128
128
|
version_requirements: &id008 !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
@@ -136,8 +136,8 @@ dependencies:
|
|
136
136
|
- 6
|
137
137
|
version: "1.6"
|
138
138
|
requirement: *id008
|
139
|
+
prerelease: false
|
139
140
|
name: highline
|
140
|
-
type: :runtime
|
141
141
|
description: This is a scraper of Bookscan (http://www.bookscan.co.jp) Service.This is *NOT* a official software of Bookscan.
|
142
142
|
email: y.takahara@gmail.com
|
143
143
|
executables:
|
@@ -195,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
195
|
requirements: []
|
196
196
|
|
197
197
|
rubyforge_project:
|
198
|
-
rubygems_version: 1.
|
198
|
+
rubygems_version: 1.4.2
|
199
199
|
signing_key:
|
200
200
|
specification_version: 3
|
201
201
|
summary: BookScan Scraper
|