image-dumper 0.7.9 → 0.8
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.
- checksums.yaml +4 -4
- data/bin/dumper +27 -20
- data/lib/dumper/profiles/fakku.rb +5 -2
- data/lib/dumper/utils.rb +4 -4
- data/lib/dumper/version.rb +1 -1
- data/lib/dumper.rb +0 -1
- metadata +52 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a271949bdf94df1ddf5301b00800dd2e98d6df07
|
4
|
+
data.tar.gz: b70bb0f5fa24a749f3d6a47c0177265fe10b9f94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbc65f3877081c9d09ac8378b92f2776551818a8cd2bfac69007bb445b916b034005443fd95dc5415a66a18df3b10f55a242e98550628d5f32151d0cc7aa5147
|
7
|
+
data.tar.gz: 6b1b41c11742cdfa79d2c6f2cdfb9b33328e938fb98991b6243768521e49ff426361492205ea7c206415f73250a3e1ffffb1d72ab531954304301406a440a312
|
data/bin/dumper
CHANGED
@@ -18,13 +18,14 @@
|
|
18
18
|
# along with Dumper. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
#++
|
20
20
|
require 'dumper'
|
21
|
+
require 'optparse'
|
21
22
|
|
22
23
|
options = {}
|
23
24
|
|
24
25
|
OptionParser.new do |o|
|
25
26
|
options[:url ] = []
|
26
27
|
options[:path] = []
|
27
|
-
|
28
|
+
|
28
29
|
o.on '-l', '--list', 'Show available profiles' do
|
29
30
|
abort 'Profiles available:'.tap { |s|
|
30
31
|
Dumper.list.sort { |a, b| a <=> b }.each { |p| s << "\n" + (' ' * 3) + p }
|
@@ -33,7 +34,7 @@ OptionParser.new do |o|
|
|
33
34
|
|
34
35
|
o.on '-i', '--info PROFILE', 'Get info about profiles' do |profile|
|
35
36
|
if Dumper.list.include? profile
|
36
|
-
method = ("info_#{profile}").to_sym
|
37
|
+
method = ("info_#{profile}").to_sym
|
37
38
|
Dumper::Profiles.send(method).tap { |i|
|
38
39
|
puts "Option 'from' is #{i[:from] ? 'available' : 'not available'}."
|
39
40
|
puts "Option 'to' is #{i[:to] ? 'available' : 'not available'}."
|
@@ -43,44 +44,44 @@ OptionParser.new do |o|
|
|
43
44
|
abort 'Profile not found.'
|
44
45
|
end
|
45
46
|
end
|
46
|
-
|
47
|
+
|
47
48
|
o.on '-u', '--url URL', 'Target URL' do |url|
|
48
49
|
options[:url] << url
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
o.on '-f', '--from PAGE', 'Start to save from... (if allowed)' do |pages|
|
52
53
|
options[:from] = pages.to_i
|
53
54
|
end
|
54
|
-
|
55
|
+
|
55
56
|
o.on '-t', '--to PAGE', 'Finish to save at... (if allowed)' do |pages|
|
56
57
|
options[:to] = pages.to_i
|
57
58
|
end
|
58
|
-
|
59
|
+
|
59
60
|
o.on '-p', '--path PATH', 'Target folder' do |path|
|
60
61
|
options[:path] << File.expand_path(path)
|
61
62
|
end
|
62
|
-
|
63
|
+
|
63
64
|
o.on '-x', '--xpath XPATH', 'Use a custom xpath' do |xpath|
|
64
65
|
options[:xpath] = xpath
|
65
66
|
end
|
66
|
-
|
67
|
+
|
67
68
|
o.on '-r', '--profile PROFILE', 'Force the use of the given profile' do |profile|
|
68
69
|
options[:profile] = profile
|
69
70
|
end
|
70
|
-
|
71
|
+
|
71
72
|
o.on '-t', '--threads MIN:MAX', 'Set the number of threads to use' do |threads|
|
72
73
|
threads = threads.split ?:
|
73
74
|
Dumper.pool_size = threads[0].to_i, threads[1].to_i
|
74
75
|
end
|
75
|
-
|
76
|
+
|
76
77
|
o.on '-m', '--silence', 'Print only important messages' do
|
77
78
|
Dumper.shut_up!
|
78
79
|
end
|
79
|
-
|
80
|
+
|
80
81
|
o.on '-o', '--output ', 'Print the logs on the given file' do |file|
|
81
82
|
Dumper::Logger.redirect_on :file, file
|
82
83
|
end
|
83
|
-
|
84
|
+
|
84
85
|
o.on '-s', '--file FILE', 'File containing in each line "URL||Folder"' do |file|
|
85
86
|
file = File.open(file).read.gsub(/\r\n?/, "\n")
|
86
87
|
file.each_line { |line|
|
@@ -103,21 +104,27 @@ options[:url].each_with_index { |url, i|
|
|
103
104
|
|
104
105
|
host = options[:profile] || URI.parse(url).host.split(?.)[-2]
|
105
106
|
|
106
|
-
if
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
107
|
+
if Dumper.list.include?(host.gsub(?-, ?_))
|
108
|
+
if options[:xpath].nil?
|
109
|
+
method = "get_#{host.gsub ?-, ?_}".to_sym
|
110
|
+
|
111
|
+
case
|
112
|
+
when options[:from] && options[:to] then Dumper::Profiles.send method, url, options[:path][i], options[:from], options[:to]
|
113
|
+
when options[:from] then Dumper::Profiles.send method, url, options[:path][i], options[:from]
|
114
|
+
else Dumper::Profiles.send method, url, options[:path][i]
|
115
|
+
end
|
116
|
+
else
|
117
|
+
Dumper.get_generic url, options[:path][i], options[:xpath]
|
112
118
|
end
|
113
119
|
else
|
114
|
-
|
120
|
+
puts 'Cannot find any profile for your source.'
|
121
|
+
puts 'Consider using `--profile` or `--xpath`.'
|
115
122
|
end
|
116
123
|
rescue Nokogiri::XML::XPath::SyntaxError => e
|
117
124
|
puts e.to_s.gsub /expression/, 'xpath'
|
118
125
|
puts 'Cannot dump.'
|
119
126
|
rescue OpenURI::HTTPError => e
|
120
|
-
puts "Error opening #{url}: #{e}"
|
127
|
+
puts "Error opening #{url}: #{e}"
|
121
128
|
rescue URI::InvalidURIError => e
|
122
129
|
puts "URL #{url} is not valid: #{e}"
|
123
130
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright(C)
|
2
|
+
# Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
3
|
#
|
4
4
|
# This file is part of Dumper.
|
5
5
|
#
|
@@ -25,8 +25,11 @@ module Dumper
|
|
25
25
|
url += '/read' unless url.end_with? '/read'
|
26
26
|
errors = 0
|
27
27
|
|
28
|
-
|
28
|
+
js_thumbs_slice = open(url).read.split('window.params.thumbs')[1].split('\/thumbs\/')
|
29
|
+
thumbs_count = js_thumbs_slice[1..-1].count
|
30
|
+
cdn = js_thumbs_slice[0].gsub(/\\\//m, ?/)[5..-1] + '/images/'
|
29
31
|
|
32
|
+
to = thumbs_count if to > thumbs_count
|
30
33
|
from.upto(to) { |i|
|
31
34
|
return if errors == 3
|
32
35
|
|
data/lib/dumper/utils.rb
CHANGED
@@ -21,7 +21,7 @@ class String
|
|
21
21
|
def numeric?
|
22
22
|
self.to_i.to_s == self || self.to_f.to_s == self
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def sanitize_filename
|
26
26
|
self.split(/(?<=.)\.(?=[^.])(?!.*\.[^.])/m).map { |s| s.gsub /[^a-z0-9\-]+/i, ?_ }.join(?.)
|
27
27
|
end
|
@@ -30,12 +30,12 @@ end
|
|
30
30
|
class NilClass
|
31
31
|
def numeric?
|
32
32
|
false
|
33
|
-
end
|
33
|
+
end
|
34
34
|
end
|
35
35
|
|
36
36
|
class URI::Parser
|
37
|
-
def split
|
37
|
+
def split(url)
|
38
38
|
a = Addressable::URI::parse url
|
39
39
|
[a.scheme, a.userinfo, a.host, a.port, nil, a.path, nil, a.query, a.fragment]
|
40
40
|
end
|
41
|
-
end
|
41
|
+
end
|
data/lib/dumper/version.rb
CHANGED
data/lib/dumper.rb
CHANGED
metadata
CHANGED
@@ -1,169 +1,183 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: image-dumper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.8'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Giovanni Capuano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
version_requirements: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.6'
|
14
19
|
name: nokogiri
|
20
|
+
prerelease: false
|
15
21
|
requirement: !ruby/object:Gem::Requirement
|
16
22
|
requirements:
|
17
23
|
- - "~>"
|
18
24
|
- !ruby/object:Gem::Version
|
19
25
|
version: '1.6'
|
20
26
|
type: :runtime
|
21
|
-
|
27
|
+
- !ruby/object:Gem::Dependency
|
22
28
|
version_requirements: !ruby/object:Gem::Requirement
|
23
29
|
requirements:
|
24
30
|
- - "~>"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
27
|
-
- !ruby/object:Gem::Dependency
|
32
|
+
version: '1.0'
|
28
33
|
name: certified
|
34
|
+
prerelease: false
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
39
|
version: '1.0'
|
34
40
|
type: :runtime
|
35
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
44
|
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version: '2.3'
|
42
47
|
name: addressable
|
48
|
+
prerelease: false
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '2.3'
|
48
54
|
type: :runtime
|
49
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
- !ruby/object:Gem::Dependency
|
60
|
+
version: '1.0'
|
56
61
|
name: iconv
|
62
|
+
prerelease: false
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
67
|
version: '1.0'
|
62
68
|
type: :runtime
|
63
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
69
|
-
- !ruby/object:Gem::Dependency
|
74
|
+
version: '1.8'
|
70
75
|
name: json
|
76
|
+
prerelease: false
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
79
|
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
81
|
version: '1.8'
|
76
82
|
type: :runtime
|
77
|
-
|
83
|
+
- !ruby/object:Gem::Dependency
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
86
|
- - "~>"
|
81
87
|
- !ruby/object:Gem::Version
|
82
|
-
version: '1
|
83
|
-
- !ruby/object:Gem::Dependency
|
88
|
+
version: '0.1'
|
84
89
|
name: thread
|
90
|
+
prerelease: false
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
93
|
- - "~>"
|
88
94
|
- !ruby/object:Gem::Version
|
89
95
|
version: '0.1'
|
90
96
|
type: :runtime
|
91
|
-
|
97
|
+
- !ruby/object:Gem::Dependency
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
93
99
|
requirements:
|
94
100
|
- - "~>"
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
102
|
+
version: '1.1'
|
103
|
+
name: rainbow
|
104
|
+
prerelease: false
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.1'
|
110
|
+
type: :runtime
|
97
111
|
- !ruby/object:Gem::Dependency
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0.4'
|
98
117
|
name: alakazam
|
118
|
+
prerelease: false
|
99
119
|
requirement: !ruby/object:Gem::Requirement
|
100
120
|
requirements:
|
101
121
|
- - "~>"
|
102
122
|
- !ruby/object:Gem::Version
|
103
123
|
version: '0.4'
|
104
124
|
type: :runtime
|
105
|
-
|
125
|
+
- !ruby/object:Gem::Dependency
|
106
126
|
version_requirements: !ruby/object:Gem::Requirement
|
107
127
|
requirements:
|
108
128
|
- - "~>"
|
109
129
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
111
|
-
- !ruby/object:Gem::Dependency
|
130
|
+
version: '10.3'
|
112
131
|
name: rake
|
132
|
+
prerelease: false
|
113
133
|
requirement: !ruby/object:Gem::Requirement
|
114
134
|
requirements:
|
115
135
|
- - "~>"
|
116
136
|
- !ruby/object:Gem::Version
|
117
137
|
version: '10.3'
|
118
138
|
type: :development
|
119
|
-
|
139
|
+
- !ruby/object:Gem::Dependency
|
120
140
|
version_requirements: !ruby/object:Gem::Requirement
|
121
141
|
requirements:
|
122
142
|
- - "~>"
|
123
143
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
125
|
-
- !ruby/object:Gem::Dependency
|
144
|
+
version: '3.1'
|
126
145
|
name: rspec
|
146
|
+
prerelease: false
|
127
147
|
requirement: !ruby/object:Gem::Requirement
|
128
148
|
requirements:
|
129
149
|
- - "~>"
|
130
150
|
- !ruby/object:Gem::Version
|
131
151
|
version: '3.1'
|
132
152
|
type: :development
|
133
|
-
|
153
|
+
- !ruby/object:Gem::Dependency
|
134
154
|
version_requirements: !ruby/object:Gem::Requirement
|
135
155
|
requirements:
|
136
156
|
- - "~>"
|
137
157
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
139
|
-
- !ruby/object:Gem::Dependency
|
158
|
+
version: '1.6'
|
140
159
|
name: fastimage
|
160
|
+
prerelease: false
|
141
161
|
requirement: !ruby/object:Gem::Requirement
|
142
162
|
requirements:
|
143
163
|
- - "~>"
|
144
164
|
- !ruby/object:Gem::Version
|
145
165
|
version: '1.6'
|
146
166
|
type: :development
|
147
|
-
|
167
|
+
- !ruby/object:Gem::Dependency
|
148
168
|
version_requirements: !ruby/object:Gem::Requirement
|
149
169
|
requirements:
|
150
170
|
- - "~>"
|
151
171
|
- !ruby/object:Gem::Version
|
152
|
-
version: '1.
|
153
|
-
- !ruby/object:Gem::Dependency
|
172
|
+
version: '1.0'
|
154
173
|
name: parallel_tests
|
174
|
+
prerelease: false
|
155
175
|
requirement: !ruby/object:Gem::Requirement
|
156
176
|
requirements:
|
157
177
|
- - "~>"
|
158
178
|
- !ruby/object:Gem::Version
|
159
179
|
version: '1.0'
|
160
180
|
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '1.0'
|
167
181
|
description: A dumper to download whole galleries from board like 4chan, imagebam,
|
168
182
|
mangaeden, deviantart, etc.
|
169
183
|
email: webmaster@giovannicapuano.net
|
@@ -232,7 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
246
|
version: '0'
|
233
247
|
requirements: []
|
234
248
|
rubyforge_project:
|
235
|
-
rubygems_version: 2.
|
249
|
+
rubygems_version: 2.4.8
|
236
250
|
signing_key:
|
237
251
|
specification_version: 4
|
238
252
|
summary: Fetch and download image gallery.
|