directlink 0.0.2.0 → 0.0.2.1
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/README.md +0 -2
- data/bin/directlink +1 -1
- data/directlink.gemspec +1 -1
- data/lib/directlink.rb +17 -9
- data/test.rb +25 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ad94a6b55149c5f3f0a26a021131eff17311d65
|
4
|
+
data.tar.gz: d564d355ef4c3447274cd535ca569c3454262411
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d310ca90312eca7a4bbfbabe7773887f8cf6649c69fa31dd10bc154137aebd7eedb49413a4b4018783c8fbe8505f293cc696bbeb5dbd0025ae77f4a835d9fad9
|
7
|
+
data.tar.gz: 6e5b998c2c7d8006cd9762c4c80a3ce4f6e84887a537ad6712790a11f05b0e808f8e86b20a8f092d1ba8868d8fed390ec9d5be8493e93ecece1229a090ff2008
|
data/README.md
CHANGED
@@ -85,7 +85,6 @@ When an image hosting with known API is recognized, the API will be used and you
|
|
85
85
|
```
|
86
86
|
$ export IMGUR_CLIENT_ID=0f99cd781...
|
87
87
|
$ export FLICKR_API_KEY=dc2bfd348b...
|
88
|
-
$ export _500PX_CONSUMER_KEY=ESkHT...
|
89
88
|
```
|
90
89
|
|
91
90
|
### As a library
|
@@ -139,5 +138,4 @@ SocketError: Failed to open TCP connection to minus.com:80 (getaddrinfo: nodenam
|
|
139
138
|
* `module DirectLink` public methods return different sets of properties -- `DirectLink()` unites them
|
140
139
|
* the `DirectLink::ErrorAssert` should never happen and you might report it if it does
|
141
140
|
* style: `@@` and lambdas are used to keep things private
|
142
|
-
* resolution of 500px.com photo is that you get via Pro membership, not that URL really provides
|
143
141
|
* this gem is a 2 or 3 libraries merged so don't expect tests to be full and consistent
|
data/bin/directlink
CHANGED
@@ -42,7 +42,7 @@ if github
|
|
42
42
|
else
|
43
43
|
require "directlink"
|
44
44
|
end
|
45
|
-
NetHTTPUtils.logger.level = Logger::FATAL
|
45
|
+
NetHTTPUtils.logger.level = debug ? Logger::INFO : Logger::FATAL
|
46
46
|
# TODO --timeout=
|
47
47
|
DirectLink.silent = !debug
|
48
48
|
abort "usage: directlink [--debug] [--json] [--github] <link1> <link2> <link3> ...\n#{
|
data/directlink.gemspec
CHANGED
data/lib/directlink.rb
CHANGED
@@ -80,27 +80,27 @@ module DirectLink
|
|
80
80
|
require "json"
|
81
81
|
require "nethttputils"
|
82
82
|
|
83
|
-
|
83
|
+
# TODO make the timeout handling respect the way the Directlink method works with timeouts
|
84
|
+
def self.imgur link, timeout = 1000
|
84
85
|
raise ErrorMissingEnvVar.new "define IMGUR_CLIENT_ID env var" unless ENV["IMGUR_CLIENT_ID"]
|
85
86
|
|
86
87
|
case link
|
87
88
|
when /\Ahttps?:\/\/(?:(?:i|m|www)\.)?imgur\.com\/(a|gallery)\/([a-zA-Z0-9]{5}(?:[a-zA-Z0-9]{2})?)\z/,
|
88
89
|
/\Ahttps?:\/\/imgur\.com\/(gallery)\/([a-zA-Z0-9]{5}(?:[a-zA-Z0-9]{2})?)\/new\z/
|
89
|
-
|
90
|
+
t = 1
|
90
91
|
json = begin
|
91
92
|
NetHTTPUtils.request_data "https://api.imgur.com/3/#{
|
92
93
|
$1 == "gallery" ? "gallery" : "album"
|
93
94
|
}/#{$2}/0.json", header: { Authorization: "Client-ID #{ENV["IMGUR_CLIENT_ID"]}" }
|
94
95
|
rescue NetHTTPUtils::Error => e
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
timeout *= 2
|
96
|
+
if 500 == e.code && t < timeout
|
97
|
+
logger.error "retrying in #{t} seconds because of Imgur HTTP ERROR 500"
|
98
|
+
sleep t
|
99
|
+
t *= 2
|
100
100
|
retry
|
101
|
-
when 404 ; raise ErrorNotFound.new link.inspect
|
102
|
-
else ; raise ErrorAssert.new "unexpected http error for #{link}"
|
103
101
|
end
|
102
|
+
raise ErrorNotFound.new link.inspect if 404 == e.code
|
103
|
+
raise ErrorAssert.new "unexpected http error for #{link}"
|
104
104
|
end
|
105
105
|
data = JSON.load(json)["data"]
|
106
106
|
if data["error"]
|
@@ -122,10 +122,17 @@ module DirectLink
|
|
122
122
|
/\Ahttps?:\/\/imgur\.com\/([a-zA-Z0-9]{5}(?:[a-zA-Z0-9]{2})?)\z/,
|
123
123
|
/\Ahttps?:\/\/imgur\.com\/([a-zA-Z0-9]{7})(?:\?\S+)?\z/,
|
124
124
|
/\Ahttps?:\/\/imgur\.com\/r\/[0-9_a-z]+\/([a-zA-Z0-9]{7})\z/
|
125
|
+
t = 1
|
125
126
|
json = begin
|
126
127
|
NetHTTPUtils.request_data "https://api.imgur.com/3/image/#{$1}/0.json", header: { Authorization: "Client-ID #{ENV["IMGUR_CLIENT_ID"]}" }
|
127
128
|
rescue NetHTTPUtils::Error => e
|
128
129
|
raise ErrorNotFound.new link.inspect if e.code == 404
|
130
|
+
if e.code == 400 && t < timeout
|
131
|
+
logger.error "retrying in #{t} seconds because of Imgur HTTP ERROR 400"
|
132
|
+
sleep t
|
133
|
+
t *= 2
|
134
|
+
retry
|
135
|
+
end
|
129
136
|
raise ErrorAssert.new "unexpected http error for #{link}"
|
130
137
|
end
|
131
138
|
[ JSON.load(json)["data"] ]
|
@@ -143,6 +150,7 @@ module DirectLink
|
|
143
150
|
|
144
151
|
def self._500px link
|
145
152
|
raise ErrorBadLink.new link unless %r{\Ahttps://500px\.com/photo/(?<id>[^/]+)/[^/]+\z} =~ link
|
153
|
+
raise ErrorNotFound.new link # 500px.com has deprecated their API
|
146
154
|
raise ErrorMissingEnvVar.new "define _500PX_CONSUMER_KEY env var !!! WARNING: the 500px.com deprecates their API in summer of 2018 !!!" unless ENV["_500PX_CONSUMER_KEY"]
|
147
155
|
JSON.load( NetHTTPUtils.request_data "https://api.500px.com/v1/photos/#{id}", form: {
|
148
156
|
image_size: 2048,
|
data/test.rb
CHANGED
@@ -139,10 +139,11 @@ describe DirectLink do
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
-
it "ErrorNotFound" do
|
143
|
-
assert_raises DirectLink::ErrorNotFound do
|
142
|
+
it "ErrorNotFound when album is empty" do
|
143
|
+
e = assert_raises DirectLink::ErrorNotFound do
|
144
144
|
DirectLink.imgur "https://imgur.com/a/wPi63mj"
|
145
145
|
end
|
146
|
+
assert_nil e.cause if Exception.instance_methods.include? :cause # Ruby 2.1
|
146
147
|
end
|
147
148
|
|
148
149
|
valid_imgur_image_url = "https://i.imgur.com/BLCesav.jpg"
|
@@ -150,21 +151,34 @@ describe DirectLink do
|
|
150
151
|
assert_equal [["https://i.imgur.com/BLCesav.jpg", 1000, 1500, "image/jpeg"]],
|
151
152
|
DirectLink.imgur(valid_imgur_image_url)
|
152
153
|
end
|
153
|
-
it 404 do
|
154
|
-
assert_raises DirectLink::ErrorNotFound do
|
155
|
-
NetHTTPUtils.stub :request_data, ->*{ raise NetHTTPUtils::Error.new "", 404 } do
|
156
|
-
DirectLink.imgur valid_imgur_image_url
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
154
|
it 400 do
|
161
155
|
e = assert_raises DirectLink::ErrorAssert do
|
162
156
|
NetHTTPUtils.stub :request_data, ->*{ raise NetHTTPUtils::Error.new "", 400 } do
|
163
|
-
DirectLink.imgur valid_imgur_image_url
|
157
|
+
DirectLink.imgur valid_imgur_image_url, 4 # do not remove `4` or test may hang
|
164
158
|
end
|
165
159
|
end
|
166
160
|
assert_equal 400, e.cause.code if Exception.instance_methods.include? :cause # Ruby 2.1
|
167
161
|
end
|
162
|
+
it "does not 400 after a successfull retry" do
|
163
|
+
f = false
|
164
|
+
m = NetHTTPUtils.method :request_data
|
165
|
+
NetHTTPUtils.stub :request_data, lambda{ |*args|
|
166
|
+
f ^= true
|
167
|
+
raise NetHTTPUtils::Error.new "", 400 if f
|
168
|
+
m.call *args
|
169
|
+
} do
|
170
|
+
assert_equal [["https://i.imgur.com/BLCesav.jpg", 1000, 1500, "image/jpeg"]],
|
171
|
+
DirectLink.imgur(valid_imgur_image_url, 4) # do not remove `4` or test may hang
|
172
|
+
end
|
173
|
+
end
|
174
|
+
it 404 do
|
175
|
+
e = assert_raises DirectLink::ErrorNotFound do
|
176
|
+
NetHTTPUtils.stub :request_data, ->*{ raise NetHTTPUtils::Error.new "", 404 } do
|
177
|
+
DirectLink.imgur valid_imgur_image_url
|
178
|
+
end
|
179
|
+
end
|
180
|
+
assert_equal 404, e.cause.code if Exception.instance_methods.include? :cause # Ruby 2.1
|
181
|
+
end
|
168
182
|
|
169
183
|
[ # TODO: move these end line comments to test names; and do the same in other tests
|
170
184
|
["https://imgur.com/a/Aoh6l", "https://i.imgur.com/BLCesav.jpg", 1000, 1500, "image/jpeg"],
|
@@ -228,7 +242,7 @@ describe DirectLink do
|
|
228
242
|
|
229
243
|
[
|
230
244
|
[ :_500px, [
|
231
|
-
["https://500px.com/photo/112134597/milky-way-by-tom-hall",
|
245
|
+
["https://500px.com/photo/112134597/milky-way-by-tom-hall", DirectLink::ErrorNotFound],
|
232
246
|
] ],
|
233
247
|
[ :flickr, [
|
234
248
|
["https://www.flickr.com/photos/tomas-/17220613278/", DirectLink::ErrorNotFound],
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: directlink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2.
|
4
|
+
version: 0.0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Maslov aka Nakilon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nethttputils
|