image-dumper 0.5

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f6b3b37cb3deb4ed73cd0cc3c676ecdaf45e690a
4
+ data.tar.gz: ff6a852744bbd7437321fc3bfa157164636d647e
5
+ SHA512:
6
+ metadata.gz: 9977d1fadaedc6834bac95d61a3c1e46f8b91e8d78d672c7de584332968ae1f8dfb11992b15bed2bbf23fbae87f54c8004f77ff166e95594272b66ca0064700e
7
+ data.tar.gz: b0b5874b6b1c6350f6c18d115d189b056ef83bba18ee53e8cd15a1cf3a34a3bec311bde5c8e256ea552e856c760aed3295513988238fc5cf799fb844399bee51
@@ -0,0 +1,106 @@
1
+ #! /usr/bin/env ruby
2
+ #--
3
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
4
+ #
5
+ # This file is part of Dumper.
6
+ #
7
+ # Dumper is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # Dumper is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
19
+ #++
20
+
21
+ require 'dumper'
22
+
23
+ options = {}
24
+
25
+ OptionParser.new do |o|
26
+ options[:url] = []
27
+ options[:path] = []
28
+ options[:pages] = 1
29
+
30
+ o.on '-l', '--list', 'Show available profiles' do
31
+ abort 'Profiles available:'.tap { |s|
32
+ Dumper::Profiles::list.sort { |a, b| a <=> b }.each { |p| s << "\n" + (' ' * 3) + p }
33
+ } if ARGV.empty?
34
+ end
35
+
36
+ o.on '-i', '--info PROFILE', 'Get info about profiles' do |profile|
37
+ if Dumper::Profiles::list.include? profile
38
+ method = ("info_#{profile}").to_sym
39
+ Dumper::Profiles::send(method).tap { |i|
40
+ puts "Option 'from' is #{i[:from] ? 'available' : 'not available'}"
41
+ puts "Option 'to' is #{i[:to] ? 'available' : 'not available'}"
42
+ }
43
+ else
44
+ puts 'Profile not found.'
45
+ end
46
+ abort
47
+ end
48
+
49
+ o.on '-u', '--url URL', 'Target URL' do |url|
50
+ options[:url] << url
51
+ end
52
+
53
+ o.on '-f', '--file FILE', 'File containing a list of URLs, a double pipe (||) and the target folder, one per line' do |file|
54
+ file = File.open(file).read.gsub(/\r\n?/, "\n")
55
+ file.each_line { |line|
56
+ split = line.split('||')
57
+ options[:url] << split[0].strip
58
+ options[:path] << split[1].strip
59
+ }
60
+ end
61
+
62
+ o.on '-p', '--path PATH', 'Target folder' do |path|
63
+ options[:path] << path
64
+ end
65
+
66
+ o.on '-x', '--xpath XPATH', 'Custom xpath' do |xpath|
67
+ options[:xpath] = xpath
68
+ end
69
+
70
+ o.on '-o', '--from PAGE', 'Start to save from... (if allowed)' do |pages|
71
+ options[:from] = pages.to_i
72
+ end
73
+
74
+ o.on '-g', '--to PAGE', 'Finish to save at... (if allowed)' do |pages|
75
+ options[:to] = pages.to_i
76
+ end
77
+ end.parse!
78
+
79
+ if options[:url].empty?
80
+ abort 'URL or list of URLs is required.'
81
+ elsif options[:path].empty?
82
+ abort 'Path is required.'
83
+ end
84
+
85
+ options[:url].each_with_index { |url, i|
86
+ begin
87
+
88
+ host = URI.parse(url).host.split(?.)[-2]
89
+ Dir.mkdir(options[:path][i]) unless File.directory? options[:path][i]
90
+
91
+ if Dumper::Profiles::list.include? host
92
+ method = ('get_' + host.gsub(?-, ?_)).to_sym
93
+ Dumper::Profiles::send method, url, options[:path][i], options[:from], options[:to]
94
+ else
95
+ Dumper::Profiles::get_generic url, options[:path][i], options[:xpath]
96
+ end
97
+
98
+ rescue Nokogiri::XML::XPath::SyntaxError => e
99
+ puts e.to_s.gsub(/expression/, 'xpath')
100
+ puts 'Cannot dump.'
101
+ rescue OpenURI::HTTPError => e
102
+ puts "Error opening #{url}: #{e}"
103
+ rescue URI::InvalidURIError => e
104
+ puts "URL #{url} is not valid: #{e}"
105
+ end
106
+ }
@@ -0,0 +1,32 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Smogon-API is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Smogon-API is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Smogon-API. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'open-uri'
21
+ require 'nokogiri'
22
+ require 'uri'
23
+ require 'optparse'
24
+ require 'net/http'
25
+ require 'base64'
26
+
27
+ Dir.glob(File.expand_path("../dumper/profiles/*.rb", __FILE__)).each { |f|
28
+ require "dumper/profiles/#{File.basename(f).split(?.)[0]}"
29
+ }
30
+ require 'dumper/dumper'
31
+
32
+ require 'dumper/version'
@@ -0,0 +1,76 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper; module Profiles
21
+
22
+ def self.list
23
+ Dir.glob(File.expand_path('../profiles/*.rb', __FILE__)).sort { |a, b| b <=> a }.map { |f|
24
+ f = File.basename(f).split(?.)[0]
25
+ }
26
+ end
27
+
28
+ def self.get(path, p, ua = '', ref = '', filename = '')
29
+ p = p.to_s
30
+
31
+ begin
32
+ if p.start_with? 'data:image/'
33
+ filename = File.join path, filename == '' ? rand(1000).to_s + '.' + p.split('data:image/')[1].split(?;)[0] : filename
34
+ filename.gsub!(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
35
+ if File.exists? filename
36
+ puts "File #{filename} already exists."
37
+ else
38
+ puts "Downloading base64 image as #{filename}..."
39
+ p.gsub!(/data:image\/png;base64,/, '')
40
+ File.open(filename, 'wb') { |f| f.write Base64.decode64(p) }
41
+ end
42
+ else
43
+ filename = File.join path, filename == '' ? File.basename(p) : filename
44
+ filename.gsub!(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
45
+ if File.exists? filename
46
+ puts "File #{filename} already exists."
47
+ else
48
+ filename = File.join path, rand(1000).to_s + '.jpg' unless filename[-4] == ?.
49
+ puts "Downloading #{p} as #{filename}..."
50
+ File.open(filename, 'wb') { |f| f.write open(p, 'User-Agent' => ua, 'Referer' => ref).read }
51
+ end
52
+ end
53
+ rescue Exception => e
54
+ p e
55
+ puts "Error downloading \#{p}."
56
+ return false
57
+ end
58
+ return true
59
+ end
60
+
61
+ def self.get_generic(url, path, xpath)
62
+ uri = nil
63
+ Nokogiri::HTML(open(url)).xpath(xpath).each { |p|
64
+ if p.to_s.start_with? ?/
65
+ uri = URI(url) if uri.nil?
66
+ p = "#{uri.scheme}://#{uri.host}#{p}"
67
+ end
68
+ self.get path, p
69
+ }
70
+ end
71
+
72
+ def method_missing(method, *args, &block)
73
+ "'#{method.split('get_')[1]}' profile not found."
74
+ end
75
+
76
+ end; end
@@ -0,0 +1,34 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_4chan(url, path, from = 1, to = 1)
24
+ Nokogiri::HTML(open(url)).xpath('//a[@class = "fileThumb"]/@href').each { |p|
25
+ self.get path, "http:#{p}"
26
+ }
27
+ end
28
+
29
+ def self.info_4chan
30
+ { :from => false, :to => false }
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,39 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_behoimi(url, path, from = 1, to = 1)
24
+ ua = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0'
25
+ ref = url
26
+ from.upto(to) { |page|
27
+ u = url + "&page=#{page}"
28
+ Nokogiri::HTML(open(u, 'User-Agent' => ua, 'Referer' => ref)).xpath('//img[@class="preview "]/@src').each { |p|
29
+ self.get path, p.to_s.gsub('preview/', ''), ua, ref
30
+ }
31
+ }
32
+ end
33
+
34
+ def self.info_behoimi
35
+ { :from => true, :to => true }
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_booru(url, path, from = 1, to = 1)
24
+ page = 0
25
+ from.upto(to) { |i|
26
+ Nokogiri::HTML(open("#{url}&pid=#{page}")).xpath('//span[@class="thumb"]').each { |u|
27
+ self.get path, u.child.child['src'].gsub(/thumbs/, 'img').gsub(/thumbnails\//, 'images/').gsub(/thumbnail_/, '')
28
+ }
29
+
30
+ page += 20
31
+ puts "--- Page #{page} now... ---" # there are so much pages sometimes...
32
+ puts
33
+ }
34
+ end
35
+
36
+ def self.info_booru
37
+ { :from => true, :to => true }
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,34 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_deviantart(url, path, from = 1, to = 1)
24
+ Nokogiri::HTML(open(url)).xpath('//div[@class="zones-container"]')[0].xpath('.//a[@class="thumb"]/@data-super-full-img').each { |u|
25
+ self.get path, u
26
+ }
27
+ end
28
+
29
+ def self.info_deviantart
30
+ { :from => false, :to => false }
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,49 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_fakku(url, path, from = 1, to = 999)
24
+ url += '/read' unless url.end_with? '/read'
25
+ errors = 0
26
+
27
+ cdn = open(url).read.split('window.params.thumbs')[1].split('\/thumbs\/')[0].gsub(/\\\//m, ?/)[5..-1] + '/images/'
28
+
29
+ from.upto(to) { |i|
30
+ return if errors == 10
31
+
32
+ file = "%03d.jpg" % i
33
+ filename = "#{cdn}#{file}"
34
+
35
+ unless self.get path, URI.parse(URI.encode(filename, "[]"))
36
+ errors += 1
37
+
38
+ file = File.join(path, file).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)
39
+ File.delete(file) if File.exists? file
40
+ end
41
+ }
42
+ end
43
+
44
+ def self.info_fakku
45
+ { :from => true, :to => true }
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,41 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_gelbooru(url, path, from = 1, to = 1)
24
+ page = 0
25
+ from.upto(to) { |i|
26
+ Nokogiri::HTML(open("#{url}&pid=#{page}")).xpath('//span[@class="thumb"]').each { |u|
27
+ self.get path, u.child.child['src'].gsub(/thumbs/, 'images').gsub(/thumbnail_/, '')
28
+ }
29
+
30
+ page += 63
31
+ puts "--- Page #{page} now... ---" # there are so much pages sometimes...
32
+ puts
33
+ }
34
+ end
35
+
36
+ def self.info_gelbooru
37
+ { :from => true, :to => true }
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,38 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_imagebam(url, path, from = 1, to = 1)
24
+ Nokogiri::HTML(open(url)).xpath('//a[@style="border:none; margin:2px;"]/@href').each { |p|
25
+ next unless p.to_s.start_with? 'http://www.imagebam.com/image/'
26
+
27
+ Nokogiri::HTML(open(p)).xpath('//img[@onclick="scale(this);"]/@src').each { |u|
28
+ self.get path, u
29
+ }
30
+ }
31
+ end
32
+
33
+ def self.info_imagebam
34
+ { :from => false, :to => false }
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,54 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_mangaeden(url, path, from = 1, to = 1)
24
+ Nokogiri::HTML(open(url)).xpath('//a[@class="chapterLink"]').each { |p|
25
+ i = 1
26
+
27
+ dir = File.join path, "#{p.children[1].text} - #{p.children[3].text.sanitize_filename}"
28
+ Dir.mkdir(dir) unless File.directory? dir
29
+
30
+ page = Nokogiri::HTML(open("http://www.mangaeden.com#{p['href']}"))
31
+
32
+ page.xpath('//img[@id="mainImg"]/@src').each { |r|
33
+ self.get dir, r, '', '', "1.png"
34
+ i += 1
35
+ }
36
+
37
+ page.xpath('//a[@class="ui-state-default"]').each { |q|
38
+ next unless q.text.numeric?
39
+ q = q['href']
40
+
41
+ Nokogiri::HTML(open("http://www.mangaeden.com#{q}")).xpath('//img[@id="mainImg"]/@src').each { |r|
42
+ self.get dir, r, '', '', "#{i}.png"
43
+ i += 1
44
+ }
45
+ }
46
+ }
47
+ end
48
+
49
+ def self.info_mangaeden
50
+ { :from => false, :to => false }
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,44 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_mi9(url, path, from = 1, to = 1)
24
+ url = url[0..-2] if url.end_with? ?/
25
+
26
+ from.upto(to) { |page|
27
+ u = url + ( page == 1 ? ?/ : "_#{page}/" )
28
+ Nokogiri::HTML(open(u)).xpath('//a[@target="_blank"]/@href').each { |p|
29
+ next unless p.to_s.start_with? 'http://mi9.com/wallpaper/'
30
+ Nokogiri::HTML(open(p.to_s)).xpath('//div[@class="s_infox down"]/span/a/@href').each { |q|
31
+ Nokogiri::HTML(open(q.to_s)).xpath('//div[@class="dimg"]/a/img/@src').each { |r|
32
+ self.get path, r
33
+ }
34
+ }
35
+ }
36
+ }
37
+ end
38
+
39
+ def self.info_mi9
40
+ { :from => true, :to => true }
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,42 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_multiplayer(url, path, from = 1, to = 1)
24
+ url += '?pagina=1' unless url.split(??).last.start_with? 'pagina'
25
+
26
+ from.upto(to) { |i|
27
+ Nokogiri::HTML(open(url + i.to_s)).xpath('//div[@class="thumb"]/a/@href').each { |p|
28
+ next unless p.to_s.start_with? '/immagini/'
29
+
30
+ Nokogiri::HTML(open("http://multiplayer.it#{p}")).xpath('//a[@class="button"]/@href').each { |u|
31
+ self.get path, u
32
+ }
33
+ }
34
+ }
35
+ end
36
+
37
+ def self.info_multiplayer
38
+ { :from => true, :to => true }
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_redblow(url, path, from = 1, to = 1)
24
+ ua = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0'
25
+ ref = url
26
+
27
+ Nokogiri::HTML(open(url)).xpath('//img[@class="attachment-medium"]/@src').each { |p|
28
+ self.get path, p, ua, ref
29
+ }
30
+ end
31
+
32
+ def self.info_redblow
33
+ { :from => false, :to => false }
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,59 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ ### ALMOST BROKEN ###
24
+ def self.get_sankakucomplex(url, path, from = 1, to = 1)
25
+ if url.include?('idol.sankakucomplex') || url.include?('chan.sankakucomplex')
26
+ url.gsub!('index', 'index.content')
27
+ from.upto(to) { |page|
28
+ u = url + "&page=#{page}"
29
+ op = open(u)
30
+ begin
31
+ Nokogiri::HTML(open(u)).xpath('//a/@href').each { |p|
32
+ p = url.gsub(/post(.+)/, p.to_s)
33
+ begin
34
+ Nokogiri::HTML(open(p)).xpath('//a[@id="image-link"]/img/@src').each { |q|
35
+ self.get path, q
36
+ }
37
+ rescue Exception => e
38
+ sleep 1
39
+ retry
40
+ end
41
+ }
42
+ rescue Exception => e
43
+ sleep 1
44
+ retry
45
+ end
46
+ }
47
+ else
48
+ Nokogiri::HTML(open(url)).xpath('//a[@class="highslide"]/@href').each { |p|
49
+ self.get path, p
50
+ }
51
+ end
52
+ end
53
+
54
+ def self.info_sankakucomplex
55
+ { :from => true, :to => true }
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,43 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ module Profiles
22
+
23
+ def self.get_wallpaperhere(url, path, from = 1, to = 1)
24
+ start = url[/\/page\/.+?\//].delete('/page/').to_i || 1
25
+ url = url.sub /\/page\/.+?\//, '/page/$PAGE/'
26
+ start.upto(to) { |page|
27
+ u = url.gsub('$PAGE', page.to_s)
28
+ Nokogiri::HTML(open(u)).xpath('//div[@class="wallpapers_list mt10 clearfix"]/ul[@class="clearfix"]/li').each { |p|
29
+ p = p.xpath('a/@href').to_s
30
+ size = Nokogiri::HTML(open('http://www.wallpaperhere.com' + p + '/download_preview')).xpath('//dl[@class="wp_rel"]/dd')[0].text
31
+ Nokogiri::HTML(open('http://www.wallpaperhere.com' + p + '/download_' + size)).xpath('//div[@class="download_img"]/div/img/@src').each { |q|
32
+ self.get path, 'http://www.wallpaperhere.com' + q.to_s
33
+ }
34
+ }
35
+ }
36
+ end
37
+
38
+ def self.info_wallpaperhere
39
+ { :from => false, :to => true }
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,36 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ class String
21
+
22
+ def numeric?
23
+ self.to_i.to_s == self || self.to_f.to_s == self
24
+ end
25
+
26
+ def sanitize_filename
27
+ self.split(/(?<=.)\.(?=[^.])(?!.*\.[^.])/m).map { |s| s.gsub /[^a-z0-9\-]+/i, ?_ }.join(?.)
28
+ end
29
+
30
+ end
31
+
32
+ class NilClass
33
+ def numeric?
34
+ false
35
+ end
36
+ end
@@ -0,0 +1,24 @@
1
+ #--
2
+ # Copyright(C) 2013 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # This file is part of Dumper.
5
+ #
6
+ # Dumper is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Dumper is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Dumper. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ module Dumper
21
+ def self.version
22
+ '0.5'
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: image-dumper
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.5'
5
+ platform: ruby
6
+ authors:
7
+ - Giovanni Capuano
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: A dumper to download whole galleries from board like 4chan, imagebam,
28
+ mangaeden, deviantart, etc.
29
+ email: webmaster@giovannicapuano.net
30
+ executables:
31
+ - dumper
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - lib/dumper/dumper.rb
36
+ - lib/dumper/profiles/4chan.rb
37
+ - lib/dumper/profiles/behoimi.rb
38
+ - lib/dumper/profiles/booru.rb
39
+ - lib/dumper/profiles/deviantart.rb
40
+ - lib/dumper/profiles/fakku.rb
41
+ - lib/dumper/profiles/gelbooru.rb
42
+ - lib/dumper/profiles/imagebam.rb
43
+ - lib/dumper/profiles/mangaeden.rb
44
+ - lib/dumper/profiles/mi9.rb
45
+ - lib/dumper/profiles/multiplayer.rb
46
+ - lib/dumper/profiles/redblow.rb
47
+ - lib/dumper/profiles/sankakucomplex.rb
48
+ - lib/dumper/profiles/wallpaperhere.rb
49
+ - lib/dumper/utils.rb
50
+ - lib/dumper/version.rb
51
+ - lib/dumper.rb
52
+ - bin/dumper
53
+ homepage: http://www.giovannicapuano.net
54
+ licenses:
55
+ - GPL-3
56
+ metadata: {}
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 2.0.3
74
+ signing_key:
75
+ specification_version: 4
76
+ summary: Fetch and download image gallery.
77
+ test_files: []