nokaya 0.0.8 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +58 -50
- data/bin/nokaya +0 -0
- data/lib/nokaya.rb +0 -2
- data/lib/nokaya/adn.rb +35 -0
- data/lib/nokaya/app.rb +74 -110
- data/lib/nokaya/basic.rb +32 -0
- data/lib/nokaya/deviantart.rb +34 -0
- data/lib/nokaya/favd.rb +35 -0
- data/lib/nokaya/flickr_album.rb +40 -0
- data/lib/nokaya/imageshack_user.rb +40 -0
- data/lib/nokaya/imgur_album.rb +37 -0
- data/lib/nokaya/instagram.rb +32 -0
- data/lib/nokaya/movie.rb +33 -0
- data/lib/nokaya/photonet.rb +31 -0
- data/lib/nokaya/status.rb +22 -4
- data/lib/nokaya/tumblr.rb +28 -0
- data/lib/nokaya/tumblr_album.rb +42 -0
- data/lib/nokaya/version.rb +1 -1
- data/lib/nokaya/workers.rb +83 -0
- data/nokaya.gemspec +7 -12
- data/spec/nokaya_spec.rb +8 -14
- data/spec/spec_helper.rb +0 -1
- metadata +37 -97
- data/lib/nokaya/getter.rb +0 -100
- data/lib/nokaya/image.rb +0 -40
data/lib/nokaya/basic.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class Basic
|
5
|
+
|
6
|
+
attr_reader :options, :args, :image_url, :path, :file_name, :type, :name
|
7
|
+
|
8
|
+
def initialize args, options
|
9
|
+
@options = options
|
10
|
+
@workers = Workers.new(options)
|
11
|
+
@args = @workers.check_args(args)
|
12
|
+
@file_name = []
|
13
|
+
@image_url = []
|
14
|
+
@path = @workers.path
|
15
|
+
@type = :basic
|
16
|
+
@name = options['name'] if options['name']
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_basic page
|
20
|
+
page.xpath("//meta[@property='og:image']/@content").first.value
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse url
|
24
|
+
Nokogiri::HTML(open url)
|
25
|
+
end
|
26
|
+
|
27
|
+
def save
|
28
|
+
@workers.save(self)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class Deviantart < Basic
|
5
|
+
|
6
|
+
def initialize args, options
|
7
|
+
super(args, options)
|
8
|
+
@type = :deviantart
|
9
|
+
parsed = self.parse(args[0])
|
10
|
+
@image_url = album(parsed).compact
|
11
|
+
@author = author()
|
12
|
+
@path = "#{@path}/deviantart-#{@author}-#{@workers.timed}"
|
13
|
+
@file_name = name()
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def author
|
19
|
+
@workers.sanitize(@args[0].split('.com/')[1].chomp('/'))
|
20
|
+
end
|
21
|
+
|
22
|
+
def album page
|
23
|
+
refs = page.css('a.thumb')
|
24
|
+
refs.map {|li| li['data-super-img']}
|
25
|
+
end
|
26
|
+
|
27
|
+
def name
|
28
|
+
@image_url.map do |url|
|
29
|
+
"#{@type.to_s}-#{File.basename(url)}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
data/lib/nokaya/favd.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
class Favd < Basic
|
4
|
+
|
5
|
+
attr_reader :author
|
6
|
+
|
7
|
+
def initialize args, options
|
8
|
+
super(args, options)
|
9
|
+
@type = :favd
|
10
|
+
parsed = self.parse(args[0])
|
11
|
+
@image_url = [get_favd(parsed)]
|
12
|
+
@author = author(parsed)
|
13
|
+
@file_name = [name()]
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def author page
|
19
|
+
page.css('.username')[0].text
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_favd page
|
23
|
+
page.css('#largeImage')[0]['src']
|
24
|
+
end
|
25
|
+
|
26
|
+
def name
|
27
|
+
unless @name.nil?
|
28
|
+
"#{@type.to_s}-#{@name}"
|
29
|
+
else
|
30
|
+
"#{@type.to_s}-#{@workers.sanitize(@author)}-#{@workers.timed}.jpg"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class FlickrAlbum < Basic
|
5
|
+
|
6
|
+
attr_reader :author
|
7
|
+
|
8
|
+
def initialize args, options
|
9
|
+
super(args, options)
|
10
|
+
@type = :flickr
|
11
|
+
parsed = self.parse(args[0])
|
12
|
+
@author = author()
|
13
|
+
@image_url = album(parsed)
|
14
|
+
@path = "#{@path}/flickr-#{@author}-#{title(parsed)}-#{@workers.timed}"
|
15
|
+
@file_name = name()
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def title page
|
21
|
+
@workers.sanitize(page.css('.set-title')[0].text)
|
22
|
+
end
|
23
|
+
|
24
|
+
def album page
|
25
|
+
refs = page.css('.pc_img')
|
26
|
+
refs.map {|l| l['data-defer-src']}
|
27
|
+
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
@image_url.map do |url|
|
31
|
+
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def author
|
36
|
+
/photos\/\w+/.match(@args[0]).to_s.split('/')[1]
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class ImageshackUser < Basic
|
5
|
+
|
6
|
+
def initialize args, options
|
7
|
+
super(args, options)
|
8
|
+
@type = :imageshack
|
9
|
+
parsed = self.parse(args[0])
|
10
|
+
@image_url = album(parsed)
|
11
|
+
@author = author()
|
12
|
+
@path = "#{@path}/imageshack-#{@author}-#{@workers.timed}"
|
13
|
+
@file_name = name()
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def author
|
19
|
+
@args[0].split('/').last.chomp('/')
|
20
|
+
end
|
21
|
+
|
22
|
+
def album page
|
23
|
+
refs = page.css('a.hero-wrapper')
|
24
|
+
temp = refs.map {|li| "https://imageshack.com#{li['href']}"}
|
25
|
+
puts Status.toresolve(temp.length)
|
26
|
+
temp.map do |p|
|
27
|
+
puts Status.resolving(p)
|
28
|
+
ref = self.parse(p).css('figure.image img')
|
29
|
+
"http:#{ref[0]['src']}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def name
|
34
|
+
@image_url.map do |url|
|
35
|
+
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class ImgurAlbum < Basic
|
5
|
+
|
6
|
+
attr_reader :author
|
7
|
+
|
8
|
+
def initialize args, options
|
9
|
+
super(args, options)
|
10
|
+
@type = :imgur
|
11
|
+
parsed = self.parse(args[0])
|
12
|
+
@author = author(parsed)
|
13
|
+
@image_url = album(parsed)
|
14
|
+
@path = "#{@path}/imgur-#{@author}-#{@workers.timed}"
|
15
|
+
@file_name = name()
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def album page
|
21
|
+
refs = page.css('#imagelist .posts .post a')
|
22
|
+
refs.map {|l| "http:#{l['href']}"}
|
23
|
+
end
|
24
|
+
|
25
|
+
def name
|
26
|
+
@image_url.map do |url|
|
27
|
+
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def author page
|
32
|
+
res = page.css('.description')[0].children[1].children.text
|
33
|
+
@workers.sanitize(res)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class Instagram < Basic
|
5
|
+
|
6
|
+
attr_reader :author
|
7
|
+
|
8
|
+
def initialize args, options
|
9
|
+
super(args, options)
|
10
|
+
@type = :instagram
|
11
|
+
parsed = self.parse(args[0])
|
12
|
+
@image_url = [self.get_basic(parsed)]
|
13
|
+
@author = author(parsed)
|
14
|
+
@file_name = [name()]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def author page
|
20
|
+
page.xpath("//meta[@property='instapp:owner_user_id']/@content")[0].value
|
21
|
+
end
|
22
|
+
|
23
|
+
def name
|
24
|
+
unless @name.nil?
|
25
|
+
"#{@type.to_s}-#{@name}"
|
26
|
+
else
|
27
|
+
"#{@type.to_s}-#{@workers.sanitize(@author)}-#{@workers.timed}.jpg"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/nokaya/movie.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class Movie < Basic
|
5
|
+
|
6
|
+
require 'spotlite'
|
7
|
+
|
8
|
+
attr_reader :title, :ref_url, :year
|
9
|
+
|
10
|
+
def initialize args, options
|
11
|
+
super(args, options)
|
12
|
+
@type = :movie
|
13
|
+
resp = Spotlite::Movie.find(@args.join(' '))
|
14
|
+
@options['alt'] ? res = resp[1] : res = resp[0]
|
15
|
+
@title = res.title
|
16
|
+
@ref_url = res.url
|
17
|
+
@year = res.year
|
18
|
+
@image_url = [res.poster_url]
|
19
|
+
@file_name = [name()]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def name
|
25
|
+
unless @name.nil?
|
26
|
+
"#{@type.to_s}-#{@name}"
|
27
|
+
else
|
28
|
+
"#{@type.to_s}-#{@workers.sanitize(@title)}.jpg"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class Photonet < Basic
|
5
|
+
|
6
|
+
def initialize args, options
|
7
|
+
super(args, options)
|
8
|
+
@type = :photonet
|
9
|
+
parsed = self.parse(args[0])
|
10
|
+
@image_url = album(parsed)
|
11
|
+
@path = "#{@path}/photonet-#{@workers.timed}"
|
12
|
+
@file_name = name()
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def album page
|
18
|
+
refs = page.css('.trp-top a')
|
19
|
+
refs.map do |lin|
|
20
|
+
"http://gallery.photo.net/photo/#{lin['href'].split("=").last}-lg.jpg"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
@image_url.map do |url|
|
26
|
+
"#{@type.to_s}-#{File.basename(url).gsub('-lg', '')}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/lib/nokaya/status.rb
CHANGED
@@ -4,12 +4,18 @@ module Nokaya
|
|
4
4
|
def self.downloading img_link
|
5
5
|
"\nDownloading #{img_link}, please wait...\n\n"
|
6
6
|
end
|
7
|
-
def self.saved
|
8
|
-
"Image saved in #{path}\n\n"
|
7
|
+
def self.saved object
|
8
|
+
"Image saved in #{object.path}\n\n"
|
9
|
+
end
|
10
|
+
def self.saved_album object
|
11
|
+
"Album saved in #{object.path}\n\n"
|
9
12
|
end
|
10
13
|
def self.no_can_do
|
11
14
|
"Canceled: unable to get the page contents.\n\n"
|
12
15
|
end
|
16
|
+
def self.no_cnx
|
17
|
+
"Canceled: connexion error.\n\n"
|
18
|
+
end
|
13
19
|
def self.no_url
|
14
20
|
"\nYou have to specify a page URL.\n\n"
|
15
21
|
end
|
@@ -25,8 +31,8 @@ module Nokaya
|
|
25
31
|
def self.done
|
26
32
|
"\nDone.\n\n"
|
27
33
|
end
|
28
|
-
def self.downloading_album
|
29
|
-
"
|
34
|
+
def self.downloading_album
|
35
|
+
"Downloading album, please wait...\n\n"
|
30
36
|
end
|
31
37
|
def self.toresolve number
|
32
38
|
"\n#{number} links to resolve.\n\n"
|
@@ -34,5 +40,17 @@ module Nokaya
|
|
34
40
|
def self.resolving p
|
35
41
|
"Resolving #{p}...\n"
|
36
42
|
end
|
43
|
+
def self.searching
|
44
|
+
"\nSearching infos, please wait...\n\n"
|
45
|
+
end
|
46
|
+
def self.wait
|
47
|
+
"\nScraping the page. Downloads will start automatically. Please wait...\n\n"
|
48
|
+
end
|
49
|
+
def self.album_done
|
50
|
+
"\nAlbum downloaded.\n\n"
|
51
|
+
end
|
52
|
+
def self.no_access
|
53
|
+
"Error: can't write the file.\n\n"
|
54
|
+
end
|
37
55
|
end
|
38
56
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
class Tumblr < Basic
|
4
|
+
|
5
|
+
def initialize args, options
|
6
|
+
super(args, options)
|
7
|
+
@type = :tumblr
|
8
|
+
parsed = self.parse(args[0])
|
9
|
+
@image_url = [self.get_basic(parsed)]
|
10
|
+
@file_name = [name()]
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def name
|
16
|
+
unless @name.nil?
|
17
|
+
"#{@type.to_s}-#{@name}"
|
18
|
+
else
|
19
|
+
"#{@type.to_s}-#{base()}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def base
|
24
|
+
File.basename(@image_url[0]).gsub('tumblr_', '')
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class TumblrAlbum < Basic
|
5
|
+
|
6
|
+
def initialize args, options
|
7
|
+
super(args, options)
|
8
|
+
@type = :tumblr
|
9
|
+
parsed = self.parse(args[0])
|
10
|
+
@image_url = album(parsed)
|
11
|
+
@file_name = name()
|
12
|
+
@path = "#{@path}/tumblr-#{@workers.timed}"
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def album page
|
18
|
+
refs = []
|
19
|
+
queries = ['img.photo', '.post .photo a img', '.entry img', 'article img', '.image img', '.item_content img', 'img.post-image', '.box img', '#allposts img', '.media img', '.wide img', '.big img', '.large img', '.gallery img', '.photos img', '.content img', 'img']
|
20
|
+
queries.each do |query|
|
21
|
+
refs = page.css query
|
22
|
+
next if refs.empty?
|
23
|
+
break
|
24
|
+
end
|
25
|
+
links = []
|
26
|
+
refs.each do |l|
|
27
|
+
target = l['src']
|
28
|
+
unless (target == 'reblog.png' || target =~ /statcounter/ || target =~ /impixu/ || target =~ /quantserve/ || target == 'like.png')
|
29
|
+
links << target
|
30
|
+
end
|
31
|
+
end
|
32
|
+
links
|
33
|
+
end
|
34
|
+
|
35
|
+
def name
|
36
|
+
@image_url.map do |url|
|
37
|
+
"#{@type.to_s}-#{File.basename(url).gsub('tumblr_', '')}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|