nokaya 0.1.2 → 0.1.3
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/CHANGELOG.md +6 -0
- data/README.md +80 -72
- data/lib/nokaya.rb +1 -0
- data/lib/nokaya/adn.rb +9 -8
- data/lib/nokaya/app.rb +31 -29
- data/lib/nokaya/appstore.rb +15 -8
- data/lib/nokaya/basic.rb +28 -7
- data/lib/nokaya/deviantart.rb +4 -9
- data/lib/nokaya/favd.rb +12 -9
- data/lib/nokaya/flickr_album.rb +5 -10
- data/lib/nokaya/imageshack_user.rb +7 -12
- data/lib/nokaya/imgur_album.rb +5 -9
- data/lib/nokaya/instagram.rb +9 -7
- data/lib/nokaya/logs.rb +20 -0
- data/lib/nokaya/movie.rb +11 -9
- data/lib/nokaya/musicstore.rb +9 -4
- data/lib/nokaya/photonet.rb +6 -5
- data/lib/nokaya/tumblr.rb +7 -10
- data/lib/nokaya/tumblr_album.rb +7 -6
- data/lib/nokaya/version.rb +1 -1
- data/lib/nokaya/workers.rb +4 -21
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d57534b0d6d2649c4953b4870d6e274e1b509429
|
4
|
+
data.tar.gz: b622d24ff01c28a194b7abf542e102c38bcc28e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e403602b37f9e7caf9ae3143f14c43b5131b1c8503ef8649982355211b7827f9cc88ea753e43f526206fd42dd5dceff17f1c82e5716fe97141cd524b3e799ec4
|
7
|
+
data.tar.gz: 6e680cc80edaee91cabf1cc07ef8c431db9cb029cc093c3abfc9c7c54e9ff96ce1a97d988503983c7aed17dc7fa77471c612e37d108dfb6757ec54b30e6acf7e
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
|
3
3
|
# Nokaya
|
4
4
|
|
5
|
-
CLI to download photos from several online services including Instagram, Imgur albums, Flickr albums, App.net, Tumblr pages, Photo.net, Deviantart, etc.
|
6
|
-
|
7
|
-
Mac OS X only for the time being.
|
5
|
+
CLI to download photos from several online services including Instagram, Imgur albums, Flickr albums, App.net, Tumblr pages, Photo.net, Deviantart, movies, apps, songs, etc.
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
@@ -24,27 +22,61 @@ Example:
|
|
24
22
|
|
25
23
|
`nokaya -i http://ift.tt/1m2Nvz8`
|
26
24
|
|
27
|
-
###
|
25
|
+
### Movie
|
28
26
|
|
29
|
-
|
27
|
+
Downloads a movie poster given (part of) a movie title.
|
28
|
+
|
29
|
+
`nokaya movie title`
|
30
30
|
|
31
31
|
Example:
|
32
32
|
|
33
|
-
`nokaya
|
33
|
+
`nokaya movie the dark knight`
|
34
34
|
|
35
|
-
|
35
|
+
Use option `-a` to get an alternative.
|
36
|
+
|
37
|
+
This is useful for remakes:
|
38
|
+
|
39
|
+
`nokaya -m solaris`
|
40
|
+
|
41
|
+
(gives the 2002 version)
|
42
|
+
|
43
|
+
`nokaya -m -a solaris`
|
44
|
+
|
45
|
+
(gives the 1972 version)
|
46
|
+
|
47
|
+
### App store
|
36
48
|
|
37
|
-
|
49
|
+
Downloads a set of icons and screenshots for a given app name.
|
38
50
|
|
39
|
-
|
51
|
+
Defaults for Mac OSX, use option `-i` for iOS.
|
40
52
|
|
41
|
-
`nokaya
|
53
|
+
`nokaya appstore name`
|
42
54
|
|
43
|
-
|
55
|
+
Examples:
|
44
56
|
|
45
|
-
`nokaya -
|
57
|
+
`nokaya -as marked`
|
46
58
|
|
47
|
-
|
59
|
+
`nokaya -as -i chimp app.net`
|
60
|
+
|
61
|
+
### Music store
|
62
|
+
|
63
|
+
Downloads available art for an iTunes Store song.
|
64
|
+
|
65
|
+
Works better if you embed separate elements between quotes.
|
66
|
+
|
67
|
+
`nokaya music 'song'`
|
68
|
+
|
69
|
+
`nokaya music 'song' 'artist' 'album'`
|
70
|
+
|
71
|
+
Examples:
|
72
|
+
|
73
|
+
`nokaya -z 'stairway to heaven'`
|
74
|
+
|
75
|
+
`nokaya -z 'stairway to heaven' 'led zeppelin'`
|
76
|
+
|
77
|
+
Use the `--album` option to find an album intead of a song:
|
78
|
+
|
79
|
+
`nokaya -z --album 'calamari tuesday'`
|
48
80
|
|
49
81
|
### Imgur album
|
50
82
|
|
@@ -66,6 +98,28 @@ Example:
|
|
66
98
|
|
67
99
|
Downloads all images in the album (visible page).
|
68
100
|
|
101
|
+
### Tumblr post
|
102
|
+
|
103
|
+
`nokaya -tu url`
|
104
|
+
|
105
|
+
Example:
|
106
|
+
|
107
|
+
`nokaya -tu http://spacequest.tumblr.com/post/83560738152/sexycomics-carlos-valenzuela`
|
108
|
+
|
109
|
+
### Tumblr page
|
110
|
+
|
111
|
+
Due to the various themes and layouts existing for Tumblr galleries, this feature may not work perfectly...
|
112
|
+
|
113
|
+
Nokaya will try several techniques to extract the image links, then will fallback to scraping all available links if failing at properly detecting photos.
|
114
|
+
|
115
|
+
`nokaya -tal url`
|
116
|
+
|
117
|
+
Example:
|
118
|
+
|
119
|
+
`nokaya -tal http://brekninger.tumblr.com`
|
120
|
+
|
121
|
+
Downloads all images in the visible page.
|
122
|
+
|
69
123
|
### Photo.net page
|
70
124
|
|
71
125
|
`nokaya -pnet url`
|
@@ -94,7 +148,9 @@ Example:
|
|
94
148
|
|
95
149
|
`nokaya -ishu https://imageshack.com/user/ToddGilbert`
|
96
150
|
|
97
|
-
Downloads all images in the user gallery (visible page).
|
151
|
+
Downloads all images in the user gallery (visible page).
|
152
|
+
|
153
|
+
If the URL or user is invalid, will download images from the home page.
|
98
154
|
|
99
155
|
### Favd
|
100
156
|
|
@@ -112,73 +168,25 @@ Example:
|
|
112
168
|
|
113
169
|
`nokaya adn https://photos.app.net/30055986/1`
|
114
170
|
|
115
|
-
|
116
|
-
|
117
|
-
Downloads a movie poster given (part of) a movie title.
|
118
|
-
|
119
|
-
`nokaya movie title`
|
120
|
-
|
121
|
-
Example:
|
122
|
-
|
123
|
-
`nokaya movie the dark knight`
|
124
|
-
|
125
|
-
Use option `-a` to get an alternative.
|
126
|
-
|
127
|
-
This is useful for remakes:
|
128
|
-
|
129
|
-
`nokaya -m solaris`
|
130
|
-
|
131
|
-
(gives the 2002 version)
|
132
|
-
|
133
|
-
`nokaya -m -a solaris`
|
134
|
-
|
135
|
-
(gives the 1972 version)
|
136
|
-
|
137
|
-
### App store
|
138
|
-
|
139
|
-
Downloads a set of icons and screenshots for a given app name.
|
140
|
-
|
141
|
-
Defaults for Mac OSX, use option `-i` for iOS.
|
142
|
-
|
143
|
-
`nokaya appstore name`
|
144
|
-
|
145
|
-
Examples:
|
146
|
-
|
147
|
-
`nokaya -as marked`
|
148
|
-
|
149
|
-
`nokaya -as -i chimp app.net`
|
150
|
-
|
151
|
-
### Music store
|
152
|
-
|
153
|
-
Downloads available art for an iTunes Store song.
|
154
|
-
|
155
|
-
Works better if you embed separate elements between quotes.
|
156
|
-
|
157
|
-
`nokaya music 'song'`
|
158
|
-
|
159
|
-
`nokaya music 'song' 'artist' 'album'`
|
160
|
-
|
161
|
-
Examples:
|
171
|
+
## Options
|
162
172
|
|
163
|
-
|
173
|
+
### Silent
|
164
174
|
|
165
|
-
|
175
|
+
`--no-verbose`
|
166
176
|
|
167
|
-
|
177
|
+
Don't display current state on the screen.
|
168
178
|
|
169
|
-
|
179
|
+
```
|
180
|
+
nokaya -i --no-verbose http://instagram.com/p/noANAfjJ7B/
|
181
|
+
```
|
170
182
|
|
171
|
-
## Options
|
172
|
-
|
173
183
|
### Name
|
174
184
|
|
175
185
|
`--name` or `-n`
|
176
186
|
|
177
187
|
Specify a name (without extension).
|
178
188
|
|
179
|
-
`nokaya -i http://instagram.com/p/noANAfjJ7B/ -n happy_dog`
|
180
|
-
|
181
|
-
`nokaya -i http://instagram.com/p/noANAfjJ7B/ -n 'happy dog'`
|
189
|
+
`nokaya -i http://instagram.com/p/noANAfjJ7B/ -n happy_dog.jpg`
|
182
190
|
|
183
191
|
### Output
|
184
192
|
|
@@ -194,7 +202,7 @@ The picture(s) will be downloaded in '~/Downloads' if no output specified.
|
|
194
202
|
|
195
203
|
Specify both.
|
196
204
|
|
197
|
-
`nokaya -i http://instagram.com/p/noANAfjJ7B/ -o ~/Pics -n happy_dog`
|
205
|
+
`nokaya -i http://instagram.com/p/noANAfjJ7B/ -o ~/Pics -n happy_dog.jpg`
|
198
206
|
|
199
207
|
## Using Nokaya in a script or irb
|
200
208
|
|
@@ -208,7 +216,7 @@ result = Nokaya::Movie.new ['terminator']
|
|
208
216
|
result.save
|
209
217
|
```
|
210
218
|
|
211
|
-

|
212
220
|
|
213
221
|
|
214
222
|
The argument(s) for the movie/music/app/url - for the request - *have* to be in an array.
|
data/lib/nokaya.rb
CHANGED
data/lib/nokaya/adn.rb
CHANGED
@@ -8,27 +8,28 @@ module Nokaya
|
|
8
8
|
def initialize args, options = {}
|
9
9
|
super(args, options)
|
10
10
|
@type = :adn
|
11
|
-
parsed =
|
12
|
-
@
|
11
|
+
parsed = parse(args[0])
|
12
|
+
@urls = [get_basic(parsed)].compact
|
13
13
|
@author = author(parsed)
|
14
|
-
@
|
14
|
+
@filenames = name_files()
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def author page
|
20
|
-
page.css('.p-nickname')[0].text
|
20
|
+
page.css('.p-nickname')[0].text unless page.nil?
|
21
21
|
end
|
22
22
|
|
23
23
|
def post_id args
|
24
24
|
/\d+{2}/.match(args[0])
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
28
|
-
unless @
|
29
|
-
|
27
|
+
def name_files
|
28
|
+
unless @urls.empty?
|
29
|
+
@name ||= @workers.sanitize(@author)
|
30
|
+
["#{@type.to_s}-#{@name}-#{post_id(args)}.jpg"]
|
30
31
|
else
|
31
|
-
|
32
|
+
[]
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
data/lib/nokaya/app.rb
CHANGED
@@ -5,7 +5,9 @@ module Nokaya
|
|
5
5
|
|
6
6
|
package_name "Nokaya"
|
7
7
|
|
8
|
-
%w{basic status movie workers instagram favd adn tumblr tumblr_album imgur_album flickr_album photonet deviantart imageshack_user apple appstore musicstore}.each {|file| require_relative "#{file}"}
|
8
|
+
%w{basic status movie workers instagram favd adn tumblr tumblr_album imgur_album flickr_album photonet deviantart imageshack_user apple appstore musicstore logs}.each {|file| require_relative "#{file}"}
|
9
|
+
|
10
|
+
class_option :verbose, aliases: '-V', type: :boolean, default: true, desc: 'Enable verbose mode'
|
9
11
|
|
10
12
|
desc "movie TITLE", "Get the movie poster from IMDb (nokaya -m title)"
|
11
13
|
map "-m" => :movie
|
@@ -13,10 +15,10 @@ module Nokaya
|
|
13
15
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
14
16
|
option :alt, aliases: "-a", type: :boolean, desc: "Find an alternative response"
|
15
17
|
def movie *args
|
16
|
-
puts Status.wait
|
18
|
+
puts Status.wait if options['verbose']
|
17
19
|
image = Movie.new(args, options)
|
18
20
|
image.save
|
19
|
-
puts Status.saved(image)
|
21
|
+
puts Status.saved(image) if options['verbose']
|
20
22
|
end
|
21
23
|
|
22
24
|
desc "appstore NAME", "Get a set of icons and screenshots for Apple apps (nokaya -as name)"
|
@@ -24,21 +26,21 @@ module Nokaya
|
|
24
26
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
25
27
|
option :ios, aliases: "-i", type: :boolean, desc: "Search iOS apps instead of Mac OSX apps"
|
26
28
|
def appstore *args
|
27
|
-
puts Status.wait
|
29
|
+
puts Status.wait if options['verbose']
|
28
30
|
image = AppStore.new(args, options)
|
29
31
|
image.save
|
30
|
-
puts Status.saved_album(image)
|
32
|
+
puts Status.saved_album(image) if options['verbose']
|
31
33
|
end
|
32
34
|
|
33
|
-
desc "music
|
35
|
+
desc "music TITLE", "Get available art for an iTunes Store song (nokaya -z title)"
|
34
36
|
map "-z" => :music
|
35
37
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
36
38
|
option :album, type: :boolean, desc: "Find an album instead of a track"
|
37
39
|
def music *args
|
38
|
-
puts Status.wait
|
40
|
+
puts Status.wait if options['verbose']
|
39
41
|
image = MusicStore.new(args, options)
|
40
42
|
image.save
|
41
|
-
puts Status.saved_album(image)
|
43
|
+
puts Status.saved_album(image) if options['verbose']
|
42
44
|
end
|
43
45
|
|
44
46
|
desc "instagram URL", "Get the original picture from an Instagram page (nokaya -i url)"
|
@@ -46,30 +48,30 @@ module Nokaya
|
|
46
48
|
option :name, aliases: "-n", type: :string, desc: "Specify a file name without extension"
|
47
49
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
48
50
|
def instagram *args
|
49
|
-
puts Status.wait
|
51
|
+
puts Status.wait if options['verbose']
|
50
52
|
image = Instagram.new(args, options)
|
51
53
|
image.save
|
52
|
-
puts Status.saved(image)
|
54
|
+
puts Status.saved(image) if options['verbose']
|
53
55
|
end
|
54
56
|
|
55
57
|
desc "favd URL", 'Get the picture from a Favd page (nokaya favd url)'
|
56
58
|
option :name, aliases: "-n", type: :string, desc: "Specify a file name without extension"
|
57
59
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
58
60
|
def favd *args
|
59
|
-
puts Status.wait
|
61
|
+
puts Status.wait if options['verbose']
|
60
62
|
image = Favd.new(args, options)
|
61
63
|
image.save
|
62
|
-
puts Status.saved(image)
|
64
|
+
puts Status.saved(image) if options['verbose']
|
63
65
|
end
|
64
66
|
|
65
|
-
desc "adn URL", "Get the picture from
|
67
|
+
desc "adn URL", "Get the picture from an app.net page (nokaya adn url)"
|
66
68
|
option :name, aliases: "-n", type: :string, desc: "Specify a file name without extension"
|
67
69
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
68
70
|
def adn *args
|
69
|
-
puts Status.wait
|
71
|
+
puts Status.wait if options['verbose']
|
70
72
|
image = ADN.new(args, options)
|
71
73
|
image.save
|
72
|
-
puts Status.saved(image)
|
74
|
+
puts Status.saved(image) if options['verbose']
|
73
75
|
end
|
74
76
|
|
75
77
|
desc "tumblr URL", "Get the picture from a Tumblr post (nokaya -tu url)"
|
@@ -77,70 +79,70 @@ module Nokaya
|
|
77
79
|
option :name, aliases: "-n", type: :string, desc: "Specify a file name without extension"
|
78
80
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
79
81
|
def tumblr *args
|
80
|
-
puts Status.wait
|
82
|
+
puts Status.wait if options['verbose']
|
81
83
|
image = Tumblr.new(args, options)
|
82
84
|
image.save
|
83
|
-
puts Status.saved(image)
|
85
|
+
puts Status.saved(image) if options['verbose']
|
84
86
|
end
|
85
87
|
|
86
88
|
desc "tumblr_album URL", "Get all pictures from a Tumblr page (nokaya -tal url)"
|
87
89
|
map "-tal" => :tumblr_album
|
88
90
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
89
91
|
def tumblr_album *args
|
90
|
-
puts Status.wait
|
92
|
+
puts Status.wait if options['verbose']
|
91
93
|
image = TumblrAlbum.new(args, options)
|
92
94
|
image.save
|
93
|
-
puts Status.saved_album(image)
|
95
|
+
puts Status.saved_album(image) if options['verbose']
|
94
96
|
end
|
95
97
|
|
96
98
|
desc "imgur_album URL", "Get all pictures from an Imgur album (nokaya -ial url)"
|
97
99
|
map "-ial" => :imgur_album
|
98
100
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
99
101
|
def imgur_album *args
|
100
|
-
puts Status.wait
|
102
|
+
puts Status.wait if options['verbose']
|
101
103
|
image = ImgurAlbum.new(args, options)
|
102
104
|
image.save
|
103
|
-
puts Status.saved_album(image)
|
105
|
+
puts Status.saved_album(image) if options['verbose']
|
104
106
|
end
|
105
107
|
|
106
108
|
desc "flickr_album URL", "Get all pictures from a Flickr album (nokaya -fal url)"
|
107
109
|
map "-fal" => :flickr_album
|
108
110
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
109
111
|
def flickr_album *args
|
110
|
-
puts Status.wait
|
112
|
+
puts Status.wait if options['verbose']
|
111
113
|
image = FlickrAlbum.new(args, options)
|
112
114
|
image.save
|
113
|
-
puts Status.saved_album(image)
|
115
|
+
puts Status.saved_album(image) if options['verbose']
|
114
116
|
end
|
115
117
|
|
116
118
|
desc "photonet URL", "Get all pictures from a Photo.net page (nokaya -pnet url)"
|
117
119
|
map "-pnet" => :photonet
|
118
120
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
119
121
|
def photonet *args
|
120
|
-
puts Status.wait
|
122
|
+
puts Status.wait if options['verbose']
|
121
123
|
image = Photonet.new(args, options)
|
122
124
|
image.save
|
123
|
-
puts Status.saved_album(image)
|
125
|
+
puts Status.saved_album(image) if options['verbose']
|
124
126
|
end
|
125
127
|
|
126
128
|
desc "deviantart URL", "Get all pictures from a Deviantart gallery (nokaya -dart url)"
|
127
129
|
map "-dart" => :deviantart
|
128
130
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
129
131
|
def deviantart *args
|
130
|
-
puts Status.wait
|
132
|
+
puts Status.wait if options['verbose']
|
131
133
|
image = Deviantart.new(args, options)
|
132
134
|
image.save
|
133
|
-
puts Status.saved_album(image)
|
135
|
+
puts Status.saved_album(image) if options['verbose']
|
134
136
|
end
|
135
137
|
|
136
138
|
desc "imageshack_user URL", "Get all pictures from an Imageshack user gallery (nokaya -ishu url)"
|
137
139
|
map "-ishu" => :imageshack_user
|
138
140
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
139
141
|
def imageshack_user *args
|
140
|
-
puts Status.wait
|
142
|
+
puts Status.wait if options['verbose']
|
141
143
|
image = ImageshackUser.new(args, options)
|
142
144
|
image.save
|
143
|
-
puts Status.saved_album(image)
|
145
|
+
puts Status.saved_album(image) if options['verbose']
|
144
146
|
end
|
145
147
|
|
146
148
|
desc "version", "Displays version number and informations"
|
data/lib/nokaya/appstore.rb
CHANGED
@@ -11,29 +11,34 @@ module Nokaya
|
|
11
11
|
super(args, options)
|
12
12
|
@type = :appstore
|
13
13
|
@appname = @workers.sanitize(args.join('_'))
|
14
|
-
@
|
14
|
+
@urls = [grab_small(args), grab_big(args)].compact
|
15
15
|
find_screenshots(args)
|
16
16
|
@path = "#{@path}/appstore-#{@appname}-#{@workers.timed}"
|
17
|
-
@
|
17
|
+
@filenames = name_files()
|
18
18
|
remove_instance_variable(:@res)
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
-
def
|
24
|
-
@
|
23
|
+
def name_files
|
24
|
+
@urls.map.with_index do |url, index|
|
25
25
|
"#{@type.to_s}-#{@appname}-#{'%02d' % index}-#{File.basename(url).gsub('ApplicationIcon.', '')}"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
def find_icon terms
|
30
|
-
itunes_url =
|
31
|
-
|
30
|
+
itunes_url = create_url(terms)
|
31
|
+
begin
|
32
|
+
@res = open(itunes_url).read
|
33
|
+
rescue SocketError
|
34
|
+
Logs.rec.error 'No connexion'
|
35
|
+
@res = {}.to_json
|
36
|
+
end
|
32
37
|
match = @res.match(/"#{@icon_size}":"(.*?)",/)
|
33
38
|
unless match.nil?
|
34
39
|
return match[1]
|
35
40
|
else
|
36
|
-
return
|
41
|
+
return nil
|
37
42
|
end
|
38
43
|
end
|
39
44
|
|
@@ -49,7 +54,9 @@ module Nokaya
|
|
49
54
|
|
50
55
|
def find_screenshots terms
|
51
56
|
res = JSON.parse(@res)
|
52
|
-
res['results']
|
57
|
+
unless res.empty? || res['results'].empty?
|
58
|
+
res['results'][0]['screenshotUrls'].each {|link| @urls << link}
|
59
|
+
end
|
53
60
|
end
|
54
61
|
|
55
62
|
end
|
data/lib/nokaya/basic.rb
CHANGED
@@ -3,15 +3,16 @@ module Nokaya
|
|
3
3
|
|
4
4
|
class Basic
|
5
5
|
|
6
|
-
attr_reader :options, :args, :
|
7
|
-
attr_accessor :
|
6
|
+
attr_reader :options, :args, :filenames, :type, :name, :path
|
7
|
+
attr_accessor :urls
|
8
8
|
|
9
9
|
def initialize args, options
|
10
|
+
Logs.create_logger
|
10
11
|
@options = options
|
11
12
|
@workers = Workers.new(options)
|
12
|
-
@args =
|
13
|
-
@
|
14
|
-
@
|
13
|
+
@args = args
|
14
|
+
@filenames = []
|
15
|
+
@urls = []
|
15
16
|
@path = @workers.path
|
16
17
|
@type = :basic
|
17
18
|
@name = options['name'] if options['name']
|
@@ -19,16 +20,36 @@ module Nokaya
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def get_basic page
|
22
|
-
page.xpath("//meta[@property='og:image']/@content").first.value
|
23
|
+
page.xpath("//meta[@property='og:image']/@content").first.value unless page.nil?
|
23
24
|
end
|
24
25
|
|
25
26
|
def parse url
|
26
|
-
|
27
|
+
begin
|
28
|
+
Nokogiri::HTML(open url)
|
29
|
+
rescue Errno::ENOENT => e
|
30
|
+
Logs.rec.error e
|
31
|
+
puts Status.no_url if options['verbose']
|
32
|
+
return nil
|
33
|
+
rescue OpenURI::HTTPError => e
|
34
|
+
Logs.rec.error e
|
35
|
+
puts Status.no_can_do if options['verbose']
|
36
|
+
return nil
|
37
|
+
rescue Exception => e
|
38
|
+
Logs.rec.error e
|
39
|
+
puts Status.error if options['verbose']
|
40
|
+
return nil
|
41
|
+
end
|
27
42
|
end
|
28
43
|
|
29
44
|
def save
|
30
45
|
@workers.save(self)
|
31
46
|
end
|
32
47
|
|
48
|
+
def name_files
|
49
|
+
@urls.map do |url|
|
50
|
+
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
33
54
|
end
|
34
55
|
end
|
data/lib/nokaya/deviantart.rb
CHANGED
@@ -6,11 +6,11 @@ module Nokaya
|
|
6
6
|
def initialize args, options = {}
|
7
7
|
super(args, options)
|
8
8
|
@type = :deviantart
|
9
|
-
parsed =
|
10
|
-
@
|
9
|
+
parsed = parse(args[0])
|
10
|
+
@urls = album(parsed).compact
|
11
11
|
@author = author()
|
12
12
|
@path = "#{@path}/deviantart-#{@author}-#{@workers.timed}"
|
13
|
-
@
|
13
|
+
@filenames = name_files()
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
@@ -20,15 +20,10 @@ module Nokaya
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def album page
|
23
|
+
return [] if page.nil?
|
23
24
|
refs = page.css('a.thumb')
|
24
25
|
refs.map {|li| li['data-super-img']}
|
25
26
|
end
|
26
27
|
|
27
|
-
def name
|
28
|
-
@image_url.map do |url|
|
29
|
-
"#{@type.to_s}-#{File.basename(url)}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
28
|
end
|
34
29
|
end
|
data/lib/nokaya/favd.rb
CHANGED
@@ -8,27 +8,30 @@ module Nokaya
|
|
8
8
|
def initialize args, options = {}
|
9
9
|
super(args, options)
|
10
10
|
@type = :favd
|
11
|
-
parsed =
|
12
|
-
@
|
11
|
+
parsed = parse(args[0])
|
12
|
+
@urls = get_favd(parsed).compact
|
13
13
|
@author = author(parsed)
|
14
|
-
@
|
14
|
+
@filenames = name_files()
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def author page
|
20
|
-
page.css('.username')
|
20
|
+
username = page.css('.username')
|
21
|
+
username.empty? ? [] : username[0].text
|
21
22
|
end
|
22
23
|
|
23
24
|
def get_favd page
|
24
|
-
page.css('#largeImage')
|
25
|
+
img = page.css('#largeImage')
|
26
|
+
img.empty? ? [] : [img[0]['src']]
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
28
|
-
unless @
|
29
|
-
|
29
|
+
def name_files
|
30
|
+
unless @urls.empty?
|
31
|
+
@name ||= @workers.sanitize(@author)
|
32
|
+
["#{@type.to_s}-#{@name}-#{@workers.timed}.jpg"]
|
30
33
|
else
|
31
|
-
|
34
|
+
[]
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
data/lib/nokaya/flickr_album.rb
CHANGED
@@ -8,30 +8,25 @@ module Nokaya
|
|
8
8
|
def initialize args, options = {}
|
9
9
|
super(args, options)
|
10
10
|
@type = :flickr
|
11
|
-
parsed =
|
11
|
+
parsed = parse(args[0])
|
12
12
|
@author = author()
|
13
|
-
@
|
13
|
+
@urls = album(parsed).compact
|
14
14
|
@path = "#{@path}/flickr-#{@author}-#{title(parsed)}-#{@workers.timed}"
|
15
|
-
@
|
15
|
+
@filenames = name_files()
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def title page
|
21
|
-
@workers.sanitize(page.css('.set-title')[0].text)
|
21
|
+
@workers.sanitize(page.css('.set-title')[0].text) unless page.nil?
|
22
22
|
end
|
23
23
|
|
24
24
|
def album page
|
25
|
+
return [] if page.nil?
|
25
26
|
refs = page.css('.pc_img')
|
26
27
|
refs.map {|l| l['data-defer-src']}
|
27
28
|
end
|
28
29
|
|
29
|
-
def name
|
30
|
-
@image_url.map do |url|
|
31
|
-
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
30
|
def author
|
36
31
|
/photos\/\w+/.match(@args[0]).to_s.split('/')[1]
|
37
32
|
end
|
@@ -6,11 +6,11 @@ module Nokaya
|
|
6
6
|
def initialize args, options = {}
|
7
7
|
super(args, options)
|
8
8
|
@type = :imageshack
|
9
|
-
parsed =
|
10
|
-
@
|
9
|
+
parsed = parse(args[0])
|
10
|
+
@urls = album(parsed).compact
|
11
11
|
@author = author()
|
12
12
|
@path = "#{@path}/imageshack-#{@author}-#{@workers.timed}"
|
13
|
-
@
|
13
|
+
@filenames = name_files()
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
@@ -20,21 +20,16 @@ module Nokaya
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def album page
|
23
|
+
return [] if page.nil?
|
23
24
|
refs = page.css('a.hero-wrapper')
|
24
25
|
temp = refs.map {|li| "https://imageshack.com#{li['href']}"}
|
25
|
-
puts Status.toresolve(temp.length)
|
26
|
+
puts Status.toresolve(temp.length) if options['verbose']
|
26
27
|
temp.map do |p|
|
27
|
-
puts Status.resolving(p)
|
28
|
-
ref =
|
28
|
+
puts Status.resolving(p) if options['verbose']
|
29
|
+
ref = parse(p).css('figure.image img')
|
29
30
|
"http:#{ref[0]['src']}"
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
33
|
-
def name
|
34
|
-
@image_url.map do |url|
|
35
|
-
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
34
|
end
|
40
35
|
end
|
data/lib/nokaya/imgur_album.rb
CHANGED
@@ -8,27 +8,23 @@ module Nokaya
|
|
8
8
|
def initialize args, options = {}
|
9
9
|
super(args, options)
|
10
10
|
@type = :imgur
|
11
|
-
parsed =
|
11
|
+
parsed = parse(args[0])
|
12
12
|
@author = author(parsed)
|
13
|
-
@
|
13
|
+
@urls = album(parsed)
|
14
14
|
@path = "#{@path}/imgur-#{@author}-#{@workers.timed}"
|
15
|
-
@
|
15
|
+
@filenames = name_files()
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def album page
|
21
|
+
return [] if page.nil?
|
21
22
|
refs = page.css('#imagelist .posts .post a')
|
22
23
|
refs.map {|l| "http:#{l['href']}"}
|
23
24
|
end
|
24
25
|
|
25
|
-
def name
|
26
|
-
@image_url.map do |url|
|
27
|
-
"#{@type.to_s}-#{@author}-#{File.basename(url)}"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
26
|
def author page
|
27
|
+
return [] if page.nil?
|
32
28
|
res = page.css('.description')[0].children[1].children.text
|
33
29
|
@workers.sanitize(res)
|
34
30
|
end
|
data/lib/nokaya/instagram.rb
CHANGED
@@ -8,23 +8,25 @@ module Nokaya
|
|
8
8
|
def initialize args, options = {}
|
9
9
|
super(args, options)
|
10
10
|
@type = :instagram
|
11
|
-
parsed =
|
12
|
-
@
|
11
|
+
parsed = parse(args[0])
|
12
|
+
@urls = [get_basic(parsed)].compact
|
13
13
|
@author = author(parsed)
|
14
|
-
@
|
14
|
+
@filenames = name_files()
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def author page
|
20
|
+
return [] if page.nil?
|
20
21
|
page.xpath("//meta[@property='instapp:owner_user_id']/@content")[0].value
|
21
22
|
end
|
22
23
|
|
23
|
-
def
|
24
|
-
unless @
|
25
|
-
|
24
|
+
def name_files
|
25
|
+
unless @urls.empty?
|
26
|
+
@name ||= @workers.sanitize(@author)
|
27
|
+
["#{@type.to_s}-#{@workers.sanitize(@author)}-#{@workers.timed}.jpg"]
|
26
28
|
else
|
27
|
-
|
29
|
+
[]
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
data/lib/nokaya/logs.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class Logs
|
5
|
+
|
6
|
+
class << self
|
7
|
+
attr_accessor :rec
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.create_logger
|
11
|
+
home = "#{Dir.home}/.nokaya"
|
12
|
+
Dir.mkdir(home) unless Dir.exist?(home)
|
13
|
+
@rec = Logger.new(home + "/log", 'monthly')
|
14
|
+
@rec.formatter = proc do |severity, datetime, progname, msg|
|
15
|
+
"#{datetime} (#{VERSION}) #{severity} * #{msg}\n"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
data/lib/nokaya/movie.rb
CHANGED
@@ -10,23 +10,25 @@ module Nokaya
|
|
10
10
|
def initialize args, options = {}
|
11
11
|
super(args, options)
|
12
12
|
@type = :movie
|
13
|
-
|
13
|
+
begin
|
14
|
+
resp = Spotlite::Movie.find(@args.join(' '))
|
15
|
+
rescue SocketError
|
16
|
+
Logs.rec.error 'No connexion'
|
17
|
+
return nil
|
18
|
+
end
|
14
19
|
@options['alt'] ? res = resp[1] : res = resp[0]
|
15
20
|
@title = res.title
|
16
21
|
@ref_url = res.url
|
17
22
|
@year = res.year
|
18
|
-
@
|
19
|
-
@
|
23
|
+
@urls = [res.poster_url]
|
24
|
+
@filenames = [name_files()]
|
20
25
|
end
|
21
26
|
|
22
27
|
private
|
23
28
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
else
|
28
|
-
"#{@type.to_s}-#{@workers.sanitize(@title)}.jpg"
|
29
|
-
end
|
29
|
+
def name_files
|
30
|
+
@name ||= @workers.sanitize(@title)
|
31
|
+
"#{@type.to_s}-#{@name}"
|
30
32
|
end
|
31
33
|
|
32
34
|
end
|
data/lib/nokaya/musicstore.rb
CHANGED
@@ -20,14 +20,19 @@ module Nokaya
|
|
20
20
|
data['results'].each do |obj|
|
21
21
|
next if obj['collectionName'].nil?
|
22
22
|
link = obj['artworkUrl100'].gsub('100x100', '1200x1200')
|
23
|
-
next if @
|
24
|
-
@
|
25
|
-
@
|
23
|
+
next if @urls.include?(link)
|
24
|
+
@urls << link
|
25
|
+
@filenames << "#{@workers.sanitize(obj['collectionName'])}.jpg"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
def get url
|
30
|
-
|
30
|
+
begin
|
31
|
+
JSON.parse(open(url).read)
|
32
|
+
rescue SocketError
|
33
|
+
Logs.rec.error 'No connexion'
|
34
|
+
return {'results' => []}
|
35
|
+
end
|
31
36
|
end
|
32
37
|
|
33
38
|
end
|
data/lib/nokaya/photonet.rb
CHANGED
@@ -6,23 +6,24 @@ module Nokaya
|
|
6
6
|
def initialize args, options = {}
|
7
7
|
super(args, options)
|
8
8
|
@type = :photonet
|
9
|
-
parsed =
|
10
|
-
@
|
9
|
+
parsed = parse(args[0])
|
10
|
+
@urls = album(parsed)
|
11
11
|
@path = "#{@path}/photonet-#{@workers.timed}"
|
12
|
-
@
|
12
|
+
@filenames = name_files()
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def album page
|
18
|
+
return [] if page.nil?
|
18
19
|
refs = page.css('.trp-top a')
|
19
20
|
refs.map do |lin|
|
20
21
|
"http://gallery.photo.net/photo/#{lin['href'].split("=").last}-lg.jpg"
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
def
|
25
|
-
@
|
25
|
+
def name_files
|
26
|
+
@urls.map do |url|
|
26
27
|
"#{@type.to_s}-#{File.basename(url).gsub('-lg', '')}"
|
27
28
|
end
|
28
29
|
end
|
data/lib/nokaya/tumblr.rb
CHANGED
@@ -5,23 +5,20 @@ module Nokaya
|
|
5
5
|
def initialize args, options = {}
|
6
6
|
super(args, options)
|
7
7
|
@type = :tumblr
|
8
|
-
parsed =
|
9
|
-
@
|
10
|
-
@
|
8
|
+
parsed = parse(args[0])
|
9
|
+
@urls = [get_basic(parsed)] unless parsed.nil?
|
10
|
+
@filenames = [name_files()]
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
else
|
19
|
-
"#{@type.to_s}-#{base()}"
|
20
|
-
end
|
15
|
+
def name_files
|
16
|
+
@name ||= base()
|
17
|
+
"#{@type.to_s}-#{@name}"
|
21
18
|
end
|
22
19
|
|
23
20
|
def base
|
24
|
-
File.basename(@
|
21
|
+
File.basename(@urls[0]).gsub('tumblr_', '') unless @urls.empty?
|
25
22
|
end
|
26
23
|
|
27
24
|
end
|
data/lib/nokaya/tumblr_album.rb
CHANGED
@@ -6,15 +6,16 @@ module Nokaya
|
|
6
6
|
def initialize args, options = {}
|
7
7
|
super(args, options)
|
8
8
|
@type = :tumblr
|
9
|
-
parsed =
|
10
|
-
@
|
11
|
-
@
|
9
|
+
parsed = parse(args[0])
|
10
|
+
@urls = album(parsed)
|
11
|
+
@filenames = name_files()
|
12
12
|
@path = "#{@path}/tumblr-#{@workers.timed}"
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def album page
|
18
|
+
return [] if page.nil?
|
18
19
|
refs = []
|
19
20
|
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
21
|
queries.each do |query|
|
@@ -29,11 +30,11 @@ module Nokaya
|
|
29
30
|
links << target
|
30
31
|
end
|
31
32
|
end
|
32
|
-
links
|
33
|
+
links.compact
|
33
34
|
end
|
34
35
|
|
35
|
-
def
|
36
|
-
@
|
36
|
+
def name_files
|
37
|
+
@urls.map do |url|
|
37
38
|
"#{@type.to_s}-#{File.basename(url).gsub('tumblr_', '')}"
|
38
39
|
end
|
39
40
|
end
|
data/lib/nokaya/version.rb
CHANGED
data/lib/nokaya/workers.rb
CHANGED
@@ -9,7 +9,7 @@ module Nokaya
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def save object
|
12
|
-
if object.
|
12
|
+
if object.urls.empty?
|
13
13
|
abort(Status.no_can_do)
|
14
14
|
else
|
15
15
|
save_images(object)
|
@@ -17,24 +17,12 @@ module Nokaya
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def save_images object
|
20
|
-
|
21
|
-
# save_files(object)
|
22
|
-
# else
|
23
|
-
save_tuples(object)
|
24
|
-
# end
|
20
|
+
save_tuples(object)
|
25
21
|
end
|
26
22
|
|
27
|
-
# def save_files object
|
28
|
-
# object.image_url.each do |url|
|
29
|
-
# f = File.new("#{object.path}/#{file_name(object)}", "wb")
|
30
|
-
# f.puts(get_image(url))
|
31
|
-
# f.close
|
32
|
-
# end
|
33
|
-
# end
|
34
|
-
|
35
23
|
def save_tuples object
|
36
24
|
begin
|
37
|
-
tuples = object.
|
25
|
+
tuples = object.urls.zip(object.filenames)
|
38
26
|
Dir.mkdir(object.path) unless Dir.exist?(object.path)
|
39
27
|
tuples.each do |url, name|
|
40
28
|
f = File.new("#{object.path}/#{name}", "wb")
|
@@ -66,12 +54,7 @@ module Nokaya
|
|
66
54
|
|
67
55
|
def sanitize str
|
68
56
|
reg = /[~:-;,?!\'&`^=+<>*%()\/"“”’°£$€.…]/
|
69
|
-
str.downcase.strip.gsub(reg, '_').split(' ').join('_').squeeze('_')
|
70
|
-
end
|
71
|
-
|
72
|
-
def check_args args
|
73
|
-
abort Status.no_url if args.empty?
|
74
|
-
return args
|
57
|
+
str.downcase.strip.gsub(reg, '_').split(' ').join('_').squeeze('_') unless str.nil? || str.empty?
|
75
58
|
end
|
76
59
|
|
77
60
|
def timed
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokaya
|
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
|
- Eric Dejonckheere
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- lib/nokaya/imageshack_user.rb
|
152
152
|
- lib/nokaya/imgur_album.rb
|
153
153
|
- lib/nokaya/instagram.rb
|
154
|
+
- lib/nokaya/logs.rb
|
154
155
|
- lib/nokaya/movie.rb
|
155
156
|
- lib/nokaya/musicstore.rb
|
156
157
|
- lib/nokaya/photonet.rb
|