directlink 0.0.8.5 → 0.0.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e62e48e14056c1b1ab1c34049bc1e4137ca77239
4
- data.tar.gz: 405b2ee26671bf02bcc118dd4ae985ba99d545db
3
+ metadata.gz: '08e29b8a3032310a9443ca5f2bc001c449722aa8'
4
+ data.tar.gz: 15ee2b72e8ea566e2250a0311afe530a5b9dbd36
5
5
  SHA512:
6
- metadata.gz: 1b171d73b0edd1ad7b7e7cab84bf78c82916044858c9fdbd0c8dabfd6cba6a00d6b03db9ef6ac84a001e82f769cbd8df4142f30295aab1670dcfe22700cca812
7
- data.tar.gz: ffddae00c3c62fa43ea4ce3050def2347d1010e908f1da28a886d72e39ce3c62f4202f5343180f4869523023f832e5be7f40231344baf30fc6510da03c427a50
6
+ metadata.gz: b30d00607103ed669f5876b9360b8280e24a6ba66c06117f577e47b497eb1ed76eee953bf0cfc97a2525dffc7c0f1169377cbcb780d7d2c9c1a1d74e9aaec212
7
+ data.tar.gz: 36a8ecce05a750e1b5aea43929037d67c38f4dcc0df8d022739aa7508a01d51d573e3f39f0ebbca14fca2dbb90d29eb2be6ae74949b77e1e735da7c2be16ac04
data/.bashrc CHANGED
@@ -1,4 +1,5 @@
1
1
  source api_tokens_for_travis.sh
2
- echo 'to test: ruby -I../nethttputils/lib -I./lib test.rb'
3
- echo 'to test: ruby -I../nethttputils/lib -I./lib ./bin/directlink --debug ...'
4
- echo 'or: bundle exec ./bin/directlink --debug ...'
2
+ echo 'to test: ruby -I./lib test.rb'
3
+ echo 'or: ruby -I../nethttputils/lib -I./lib ./bin/directlink --debug ...'
4
+ echo 'or: bundle exec ruby -I./lib ./bin/directlink --debug ...'
5
+ echo 'or: byebug -I./lib ./bin/directlink ...'
@@ -8,6 +8,8 @@ os:
8
8
  - osx
9
9
  rvm:
10
10
  - ruby-head
11
+ - 2.7
12
+ - 2.6
11
13
  - 2.5
12
14
  - 2.4
13
15
  - 2.3
@@ -53,6 +53,7 @@ abort "usage: directlink [--debug] [--json] [--github] [--ignore-meta] <link1> <
53
53
  }" if [nil, "-h", "--help", "-v", "--version"].include? ARGV.first
54
54
 
55
55
  begin
56
+ # Struct instances have #each and Array() ruins them so we use .is_a?(Array)
56
57
  if json
57
58
  require "json"
58
59
  t = ARGV.map do |link|
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "directlink"
3
- spec.version = "0.0.8.5"
3
+ spec.version = "0.0.9.1"
4
4
  spec.summary = "converts any kind of image hyperlink to direct link, type of image and its resolution"
5
5
 
6
6
  spec.author = "Victor Maslov aka Nakilon"
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.add_dependency "fastimage", "~>2.1.3"
13
13
  spec.add_dependency "nokogiri"
14
- spec.add_dependency "nethttputils", "~>0.3.3.0"
14
+ spec.add_dependency "nethttputils", "~>0.4.0.0"
15
15
  spec.add_dependency "reddit_bot", "~>1.7.0"
16
16
  spec.add_dependency "kramdown"
17
17
  spec.add_dependency "addressable"
@@ -47,7 +47,7 @@ module DirectLink
47
47
  when /\A(\/\/lh3\.googleusercontent\.com\/cOh2Nsv7EGo0QbuoKxoKZVZO_NcBzufuvPtzirMJfPmAzCzMtnEncfA7zGIDTJfkc1YZFX2MhgKnjA=)w530-h398-p\z/
48
48
  "https:#{$1}s#{width}/"
49
49
  when /\A(\/\/lh3\.googleusercontent\.com\/-[a-zA-Z0-9-]{11}\/[VW][a-zA-Z0-9_-]{9}I\/AAAAAAA[AC][a-zA-Z0-9]{3}\/[a-zA-Z0-9_-]{32}[gwAQ]CJoC\/)w530-h[23]\d\d-p\/[^\/]+\z/,
50
- /\A(?:https?:)?(\/\/[1-4]\.bp\.blogspot\.com\/-[a-zA-Z0-9_-]{11}\/[UVWX][a-zA-Z0-9_-]{9}I\/AAAAAAAA[A-Z][a-zA-Z0-9_-]{2}\/[a-zA-Z0-9_-]{33}C(?:EwYBhgL|(?:Lc|Kg)BGAs)\/)(?:s640|w\d\d\d?-h\d\d\d?-p(?:-k-no-nu)?)\/[^\/]+\z/,
50
+ /\A(?:https?:)?(\/\/[1-4]\.bp\.blogspot\.com\/-[a-zA-Z0-9_-]{11}\/[UVWX][a-zA-Z0-9_-]{9}I\/AAAAAAAA[A-Z][a-zA-Z0-9_-]{2}\/[a-zA-Z0-9_-]{33}C(?:EwYBhgL|(?:Lc|Kg)BGAs(?:YHQ)?)\/)(?:s640|w\d{2,4}-h\d\d\d?-p(?:-k-no-nu)?)\/[^\/]+\z/,
51
51
  /\A(?:https?:)?(\/\/[1-4]\.bp\.blogspot\.com\/-[a-zA-Z0-9-]{11}\/[UV][a-zA-Z0-9_-]{9}I\/AAAAAAAA[A-Z][a-zA-Z0-9]{2}\/[a-zA-Z0-9-]{11}\/)w72-h72-p-k-no-nu\/[^\/]+\z/
52
52
  "https:#{$1}s#{width}/"
53
53
  when /\A(https:\/\/lh3\.googleusercontent\.com\/-[a-zA-Z0-9_]{11}\/AAAAAAAAAAI\/AAAAAAAAAAQ\/[a-zA-Z0-9_]{11}\/)w530-h[13]\d\d-n\/[^\/]+\z/,
@@ -137,7 +137,7 @@ module DirectLink
137
137
  end
138
138
 
139
139
  def self._500px link
140
- raise ErrorBadLink.new link unless %r{\Ahttps://500px\.com/photo/(?<id>[^/]+)/[^/]+\z} =~ link
140
+ raise ErrorBadLink.new link unless %r{\Ahttps://500px\.com/photo/(?<id>[^/]+)/[-[a-zA-Z0-9]%]+\/?\z} =~ link
141
141
  require "nokogiri"
142
142
  resp = NetHTTPUtils.request_data link
143
143
  f = lambda do |form|
@@ -221,6 +221,7 @@ module DirectLink
221
221
  raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" unless json.size == 2
222
222
  json.find{ |_| _["data"]["children"].first["kind"] == "t3" }
223
223
  end
224
+ # TODO: do we handle linking Imgur albums?
224
225
  data = json["data"]["children"].first["data"]
225
226
  if data["media"]["reddit_video"]
226
227
  return [true, data["media"]["reddit_video"]["fallback_url"]]
@@ -228,6 +229,9 @@ module DirectLink
228
229
  raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" unless data["media"].keys.sort == %w{ oembed type } && %w{ youtube.com gfycat.com imgur.com }.include?(data["media"]["type"])
229
230
  return [true, data["media"]["oembed"]["thumbnail_url"]]
230
231
  end if data["media"]
232
+ return [true, data["media_metadata"].values.map do |media|
233
+ [media["m"], *media["p"].max_by{ |_| _["x"] * _["y"] }.values_at("x", "y", "u")]
234
+ end] if data["media_metadata"]
231
235
  return [true, data["url"]] if data["crosspost_parent"]
232
236
  return [true, data["url"]] unless data["is_self"]
233
237
  raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" if data["url"] != "https://www.reddit.com" + data["permalink"]
@@ -236,7 +240,7 @@ module DirectLink
236
240
 
237
241
  def self.vk link
238
242
  id, mtd, field, f = case link
239
- when %r{\Ahttps://vk\.com/id(?<user_id>\d+)\?z=photo(?<id>\k<user_id>_\d+)(%2F(album\k<user_id>_0|photos\k<user_id>))\z},
243
+ when %r{\Ahttps://vk\.com/id(?<user_id>\d+)\?z=photo(?<id>\k<user_id>_\d+)(%2F(album\k<user_id>_0|photos\k<user_id>))?\z},
240
244
  %r{\Ahttps://vk\.com/[a-z_]+\?z=photo(?<_>)(?<id>(?<user_id>\d+)_\d+)%2Fphotos\k<user_id>\z},
241
245
  %r{\Ahttps://vk\.com/photo(?<_>)(?<id>-?\d+_\d+)(\?all=1)?\z},
242
246
  %r{\Ahttps://vk\.com/feed\?section=likes&z=photo(?<_>)(?<id>-(?<user_id>\d+)_\d+)%2F(liked\d+|album\k<user_id>_0)\z},
@@ -244,15 +248,22 @@ module DirectLink
244
248
  %r{\Ahttps://vk\.com/wall(?<user_id>-\d+)_\d+\?z=photo(?<id>\k<user_id>_\d+)%2F(wall\k<user_id>_\d+|album\k<user_id>_00%2Frev|\d+)\z}
245
249
  [$2, :photos, :photos, lambda do |t|
246
250
  raise ErrorAssert.new "our knowledge about VK API seems to be outdated" unless 1 == t.size
247
- t.first
251
+ t
248
252
  end ]
249
- when %r{\Ahttps://vk\.com/wall(?<id>-\d+_\d+)\z}
253
+ when %r{\Ahttps://vk\.com/wall(?<id>-?\d+_\d+)\z},
254
+ %r{\Ahttps://vk\.com/[a-z\.]+\?w=wall(?<id>\d+_\d+)\z}
250
255
  [$1, :wall, :posts, lambda do |t|
251
- t.first.fetch("attachments").tap do |t|
252
- raise ErrorAssert.new "our knowledge about VK API seems to be outdated" unless 1 == t.size
253
- end.first.tap do |t|
254
- raise ErrorAssert.new "our knowledge about VK API seems to be outdated" unless %w{ type photo } == t.keys
255
- end.fetch("photo")
256
+ t.first.fetch("attachments").select do |item|
257
+ case item.keys
258
+ when %w{ type photo }
259
+ raise ErrorAssert.new "our knowledge about VK API seems to be outdated" unless item["type"] == "photo"
260
+ next true
261
+ when %w{ type audio }
262
+ raise ErrorAssert.new "our knowledge about VK API seems to be outdated" unless item["type"] == "audio"
263
+ else
264
+ raise ErrorAssert.new "our knowledge about VK API seems to be outdated"
265
+ end
266
+ end.map{ |i| i.fetch "photo" }
256
267
  end ]
257
268
  else
258
269
  raise ErrorBadLink.new link
@@ -261,12 +272,14 @@ module DirectLink
261
272
  sleep 0.25 # "error_msg"=>"Too many requests per second"
262
273
  f.call( JSON.load( NetHTTPUtils.request_data "https://api.vk.com/method/#{mtd}.getById",
263
274
  :POST, form: { field => id, :access_token => ENV["VK_ACCESS_TOKEN"], :client_secret => ENV["VK_CLIENT_SECRET"], :v => "5.101" }
264
- ).fetch("response") ).fetch("sizes").map do |s|
265
- s.values_at("width", "height", "url").tap do |whu|
266
- w, h, u = whu
267
- whu[0, 2] = FastImage.new(u, raise_on_failure: true).size if [w, h].include? 0
268
- end
269
- end.max_by{ |w, h, u| w * h }
275
+ ).fetch("response") ).map do |photos|
276
+ photos.fetch("sizes").map do |size|
277
+ size.values_at("width", "height", "url").tap do |whu|
278
+ w, h, u = whu
279
+ whu[0, 2] = FastImage.new(u, raise_on_failure: true).size if [w, h].include? 0
280
+ end
281
+ end.max_by{ |w, h, u| w * h }
282
+ end
270
283
  end
271
284
 
272
285
  class_variable_set :@@directlink, Struct.new(:url, :width, :height, :type)
@@ -369,11 +382,17 @@ def DirectLink link, timeout = nil, giveup: false, ignore_meta: false
369
382
  raise DirectLink::ErrorBadLink.new link if giveup # TODO: print original url in such cases if there was a recursion
370
383
  f = ->_{ _.type == :a ? _.attr["href"] : _.children.flat_map(&f) }
371
384
  require "kramdown"
372
- return f[Kramdown::Document.new(u).root].map do |sublink|
385
+ return f[Kramdown::Document.new(u).root].flat_map do |sublink|
373
386
  DirectLink URI.join(link, sublink).to_s, timeout, giveup: giveup
374
387
  end
375
388
  end
376
- return struct.new *u.values_at(*%w{ fallback_url width height }), "video" if u.is_a? Hash
389
+ if u.is_a? Hash
390
+ return struct.new *u.values_at(*%w{ fallback_url width height }), "video"
391
+ elsif u.is_a? Array
392
+ return u.map do |t, x, y, u|
393
+ struct.new u, x, y, t
394
+ end
395
+ end
377
396
  return DirectLink u
378
397
  fail if link == u
379
398
  rescue DirectLink::ErrorMissingEnvVar
@@ -381,8 +400,9 @@ def DirectLink link, timeout = nil, giveup: false, ignore_meta: false
381
400
  %w{ redd it } == URI(link).host.split(?.)
382
401
 
383
402
  begin
384
- w, h, u = DirectLink.vk(link)
385
- return struct.new u, w, h
403
+ return DirectLink.vk(link).map do |w, h, u|
404
+ struct.new u, w, h
405
+ end
386
406
  rescue DirectLink::ErrorMissingEnvVar
387
407
  end if %w{ vk com } == URI(link).host.split(?.)
388
408
 
@@ -402,7 +422,10 @@ def DirectLink link, timeout = nil, giveup: false, ignore_meta: false
402
422
  end
403
423
  html = Nokogiri::HTML NetHTTPUtils.request_data link, header: {"User-Agent" => "Mozilla"}
404
424
  if t = html.at_css("meta[@property='og:image']")
405
- return DirectLink t[:content], nil, giveup: true
425
+ begin
426
+ return DirectLink URI.join(link, t[:content]).to_s, nil, giveup: true
427
+ rescue URI::InvalidURIError
428
+ end
406
429
  end unless ignore_meta
407
430
  h = {} # TODO: maybe move it outside because of possible img[:src] recursion?...
408
431
  l = lambda do |node, s = []|
@@ -416,9 +439,10 @@ def DirectLink link, timeout = nil, giveup: false, ignore_meta: false
416
439
  end
417
440
  end
418
441
  end
419
- l[html].group_by(&:first).map{ |k, v| [k.join(?>), v.map(&:last)] }.tap do |results|
420
- raise if results.empty?
421
- end.max_by{ |_, v| v.map{ |i| i.width * i.height }.inject(:+) / v.size }.last
442
+ l[html].
443
+ tap{ |results| raise if results.empty? }.
444
+ group_by(&:first).map{ |k, v| [k.join(?>), v.map(&:last)] }.
445
+ max_by{ |_, v| v.map{ |i| i.width * i.height }.inject(:+) }.last
422
446
  else
423
447
  # TODO: maybe move this to right before `rescue` line
424
448
  w, h = f.size
data/test.rb CHANGED
@@ -171,6 +171,7 @@ describe DirectLink do
171
171
  http://1.bp.blogspot.com/-iSU4orVuR9Y/VFYrwQZ5qYI/AAAAAAAAMnc/WY4VfCaeplw/w72-h72-p-k-no-nu/Wolf%2Bphotography2.jpg
172
172
  http://1.bp.blogspot.com/-vPQSh6RKijU/VEi7r3D-jJI/AAAAAAAAL2Q/bGHmyuoDp5M/w72-h72-p-k-no-nu/Building%2BIn%2BLondon1-4__880.jpeg
173
173
  http://1.bp.blogspot.com/-W4xKJSsVf3M/Uz73jPlctbI/AAAAAAAAGz4/K8Tw6PILMeY/w72-h72-p-k-no-nu/Beautiful+Japanese+places4.jpg
174
+ https://1.bp.blogspot.com/-__qsdLxNtcQ/XhaOQle-ECI/AAAAAAAABQ4/S_7SGG_K8eQ7VXIU2wyPvTj9OyBfr_1sQCLcBGAsYHQ/w1200-h630-p-k-no-nu/iceland_poppies_orange_flowers_field-wallpaper-3840x2160.jpg
174
175
  https://lh3.googleusercontent.com/-tV86KJvppss/XE2Nb2Z2aAI/AAAAAAAAGu4/94E_AuB4YWAaJ59n43wmmd9rFa--OUuSQCJoC/w530-h338-n/IMG_6845%252C.png
175
176
  https://lh3.googleusercontent.com/-cr-2ZSQGMPg/XFWLfetwr7I/AAAAAAAAQQQ/TbwDk56BBIwb4IDDO0SwfArFSZyDG0i0wCJoC/w530-h360-n/DSC07294.JPG
176
177
  }.each_with_index do |link, i|
@@ -222,7 +223,7 @@ describe DirectLink do
222
223
 
223
224
  # TODO: expand this for every branch in lib
224
225
  %w{
225
- https_long_blogspot https://2.bp.blogspot.com/-rb2PXLGZy0s/W2nQe3mXOSI/AAAAAAAARhQ/P8gV-bMtYbY2xxpTJNcYVxu3XDTUaugxQCLcBGAs/s640/beach-bora-bora-clouds-753626.jpg https://2.bp.blogspot.com/-rb2PXLGZy0s/W2nQe3mXOSI/AAAAAAAARhQ/P8gV-bMtYbY2xxpTJNcYVxu3XDTUaugxQCLcBGAs/s0/
226
+ https_long_blogspot https://1.bp.blogspot.com/-__qsdLxNtcQ/XhaOQle-ECI/AAAAAAAABQ4/S_7SGG_K8eQ7VXIU2wyPvTj9OyBfr_1sQCLcBGAsYHQ/w1200-h630-p-k-no-nu/iceland_poppies_orange_flowers_field-wallpaper-3840x2160.jpg https://1.bp.blogspot.com/-__qsdLxNtcQ/XhaOQle-ECI/AAAAAAAABQ4/S_7SGG_K8eQ7VXIU2wyPvTj9OyBfr_1sQCLcBGAsYHQ/s0/
226
227
  http_short_blogspot http://4.bp.blogspot.com/-poH-QXn7YGg/U-3ZTDkeF_I/AAAAAAAAISE/ms2gNIb-v-g/w72-h72-p-k-no-nu/Top-24-Inspired-181.jpg https://4.bp.blogspot.com/-poH-QXn7YGg/U-3ZTDkeF_I/AAAAAAAAISE/ms2gNIb-v-g/s0/
227
228
  just_gplus https://lh3.googleusercontent.com/-NiGph3ObOPg/XE3DgnavXlI/AAAAAAABvgE/pcPPCe88rsU1r941wwP76TVf_o89i74kwCJoC/w530-h353-n/DSCF0753.JPG https://lh3.googleusercontent.com/-NiGph3ObOPg/XE3DgnavXlI/AAAAAAABvgE/pcPPCe88rsU1r941wwP76TVf_o89i74kwCJoC/s0/
228
229
  google_keep https://lh5.googleusercontent.com/fRmAL_04p7oomNHCiV4tH4-agHSDBtLaWi_Tb6bgE5ZSHVu5OjQF3iRn06nNwP3ywZwdFP92zWM-o8yw0cn6m0tDTBARuO6F9e0wYu_1=s685 https://lh5.googleusercontent.com/fRmAL_04p7oomNHCiV4tH4-agHSDBtLaWi_Tb6bgE5ZSHVu5OjQF3iRn06nNwP3ywZwdFP92zWM-o8yw0cn6m0tDTBARuO6F9e0wYu_1=s0
@@ -363,6 +364,8 @@ describe DirectLink do
363
364
  [
364
365
  [ :_500px, [
365
366
  ["https://500px.com/photo/264092015/morning-rider-by-tiger-seo", [1200, 800, "https://drscdn.500px.org/photo/264092015/m%3D900/v2?sig=68a9206477f573d8e2838faa6a929e7267f22dc5f9e98f1771f7a8a63efa2ed7", "jpeg"]],
367
+ ["https://500px.com/photo/1017579834/-poppies-flowers-by-David-Dubnitskiy/", [1819, 2500, "https://drscdn.500px.org/photo/1017579834/m%3D900/v2?sig=022e3e9dd836ffd8c1d31ae26c83735e4e42b4c8733d0c4380d8270aebbca44e", "jpeg"]],
368
+ ["https://500px.com/photo/1017557263/iss%E5%87%8C%E6%97%A5%E5%81%8F%E9%A3%9F-by-%E7%A7%8B%E8%A3%A4Choku-/", [2048, 2048, "https://drscdn.500px.org/photo/1017557263/m%3D2048/v2?sig=1994a09e33794117082e91fa58c40614a2bfd19d3e0dd78e067968d38aca92be", "jpeg"]]
366
369
  ] ],
367
370
  [ :flickr, [
368
371
  ["https://www.flickr.com/photos/tomas-/17220613278/", DirectLink::ErrorNotFound],
@@ -395,16 +398,18 @@ describe DirectLink do
395
398
  ["https://www.reddit.com/r/hangers/comments/97you5/tara_radovic/", [true, "https://i.imgur.com/rbLqgOu.jpg"]], # "crossport" from Imgur
396
399
  ] ],
397
400
  [ :vk, [
398
- ["https://vk.com/wall-105984091_7806", [960, 1280, "https://sun9-41.userapi.com/c855224/v855224900/a72f1/7OZ8ux9Wcwo.jpg"]],
399
- ["https://vk.com/id57030827?z=photo57030827_456241143%2Falbum57030827_0", [1920, 1440, "https://sun9-66.userapi.com/c845322/v845322944/167836/bP9z41BybhI.jpg"]],
400
- ["https://vk.com/wall-185182611_454?z=photo-185182611_457239340%2Fwall-185182611_454", [1280, 960, "https://sun9-46.userapi.com/c851028/v851028578/1a62f6/VB4SdR1O6Tg.jpg"]],
401
- ["https://vk.com/wall-105984091_7946?z=photo-105984091_457243312%2Falbum-105984091_00%2Frev", [1280, 875, "https://sun9-37.userapi.com/c852020/v852020134/1b6b36/0IsDFb-Hda4.jpg"]],
402
- ["https://vk.com/photo533531776_456239427?all=1", [750, 938, "https://sun9-25.userapi.com/c849416/v849416600/14b949/V01Ch1gYjhc.jpg"]],
403
- ["https://vk.com/photo-155488973_456242404", [1486, 1000, "https://sun9-7.userapi.com/c852132/v852132877/8578e/m6AJWiskiKE.jpg"]],
404
- ["https://vk.com/id2272074?z=photo2272074_264578776%2Fphotos2272074", [604, 484, "https://sun9-10.userapi.com/c10472/u2272074/-7/x_407b2ba2.jpg"]],
405
- ["https://vk.com/feed?section=likes&z=photo-117564754_456261460%2Fliked3902406", [1024, 1335, "https://sun9-72.userapi.com/c854028/v854028353/895b6/izQJresLdf0.jpg"]],
406
- ["https://vk.com/likizimy?z=photo-42543351_456239941%2Fwall-42543351_1908", [1179, 1731, "https://sun9-47.userapi.com/c855036/v855036571/60f7b/ryCPJIMyMkI.jpg"]],
407
- ["https://vk.com/e_rod?z=photo298742340_457247118%2Fphotos298742340", [1728, 2160, "https://sun9-53.userapi.com/c858320/v858320596/c7714/oImGe4o1ZJI.jpg"]],
401
+ ["https://vk.com/wall-105984091_7806", [[960, 1280, "https://sun9-41.userapi.com/c855224/v855224900/a72f1/7OZ8ux9Wcwo.jpg"]]],
402
+ ["https://vk.com/wall298742340_4715", [[1080, 1080, "https://sun9-24.userapi.com/c857136/v857136625/15e38b/CsCqsJD174A.jpg"]]],
403
+ ["https://vk.com/id57030827?z=photo57030827_456241143%2Falbum57030827_0", [[1920, 1440, "https://sun9-66.userapi.com/c845322/v845322944/167836/bP9z41BybhI.jpg"]]],
404
+ ["https://vk.com/id57030827?z=photo57030827_456241143", [[1920, 1440, "https://sun9-66.userapi.com/c845322/v845322944/167836/bP9z41BybhI.jpg"]]],
405
+ ["https://vk.com/wall-185182611_454?z=photo-185182611_457239340%2Fwall-185182611_454", [[1280, 960, "https://sun9-46.userapi.com/c851028/v851028578/1a62f6/VB4SdR1O6Tg.jpg"]]],
406
+ ["https://vk.com/wall-105984091_7946?z=photo-105984091_457243312%2Falbum-105984091_00%2Frev", [[1280, 875, "https://sun9-37.userapi.com/c852020/v852020134/1b6b36/0IsDFb-Hda4.jpg"]]],
407
+ ["https://vk.com/photo533531776_456239427?all=1", [[750, 938, "https://sun9-25.userapi.com/c849416/v849416600/14b949/V01Ch1gYjhc.jpg"]]],
408
+ ["https://vk.com/photo-155488973_456242404", [[1486, 1000, "https://sun9-7.userapi.com/c852132/v852132877/8578e/m6AJWiskiKE.jpg"]]],
409
+ ["https://vk.com/id2272074?z=photo2272074_264578776%2Fphotos2272074", [[604, 484, "https://sun9-10.userapi.com/c10472/u2272074/-7/x_407b2ba2.jpg"]]],
410
+ ["https://vk.com/feed?section=likes&z=photo-117564754_456261460%2Fliked3902406", [[1024, 1335, "https://sun9-72.userapi.com/c854028/v854028353/895b6/izQJresLdf0.jpg"]]],
411
+ ["https://vk.com/likizimy?z=photo-42543351_456239941%2Fwall-42543351_1908", [[1179, 1731, "https://sun9-47.userapi.com/c855036/v855036571/60f7b/ryCPJIMyMkI.jpg"]]],
412
+ ["https://vk.com/e_rod?z=photo298742340_457247118%2Fphotos298742340", [[1728, 2160, "https://sun9-53.userapi.com/c858320/v858320596/c7714/oImGe4o1ZJI.jpg"]]],
408
413
  ] ],
409
414
  ].each do |method, tests|
410
415
  next if method == :vk && ENV.include?("TRAVIS")
@@ -441,7 +446,7 @@ describe DirectLink do
441
446
  ["https://goo.gl/ySqUb5", "https://i.imgur.com/QpOBvRY.png"],
442
447
  ],
443
448
  _500px: [
444
- %w{ https://500px.com/photo/112134597/milky-way-by-tom-hall https://web.500px.com/photo/112134597/milky-way-by-tom-hall? },
449
+ %w{ https://500px.com/photo/112134597/milky-way-by-tom-hall https://500px.com/photo/112134597/milky-way-by-tom-hall },
445
450
  ],
446
451
  flickr: [
447
452
  "https://www.flickr.com/photos/59880970@N07/15773941043/in/dateposted-public/",
@@ -648,7 +653,7 @@ describe DirectLink do
648
653
 
649
654
  describe "other domains tests" do
650
655
  [
651
- ["http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg", ["http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg", 1280, 853, :jpeg], nil, 1],
656
+ # ["http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg", ["http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg", 1280, 853, :jpeg], nil, 1], # website is dead?
652
657
  # ["http://minus.com/lkP3hgRJd9npi", SocketError, /nodename nor servname provided, or not known|No address associated with hostname/, 0],
653
658
  ["http://www.cutehalloweencostumeideas.org/wp-content/uploads/2017/10/Niagara-Falls_04.jpg", SocketError, /nodename nor servname provided, or not known|Name or service not known/, 0],
654
659
  ].each_with_index do |(input, expectation, message_string_or_regex, max_redirect_resolving_retry_delay), i|
@@ -674,36 +679,39 @@ describe DirectLink do
674
679
  describe "giving up" do
675
680
  [
676
681
  ["http://example.com", FastImage::UnknownImageType],
677
- ["https://www.tic.com/index.html", FastImage::UnknownImageType, true],
678
- ["https://www.tic.com/index.html", 2],
682
+ # ["https://www.tic.com/index.html", FastImage::UnknownImageType, true], # needs new test or stub
683
+ # ["https://www.tic.com/index.html", 2], # needs new test or stub
679
684
  ["http://imgur.com/HQHBBBD", FastImage::UnknownImageType, true],
680
685
  ["http://imgur.com/HQHBBBD", "https://i.imgur.com/HQHBBBD.jpg?fb"], # .at_css("meta[@property='og:image']")
681
686
  ["https://www.deviantart.com/nadyasonika/art/Asuka-Langley-Beach-Time-590134861", FastImage::UnknownImageType, true],
682
- ["https://www.deviantart.com/nadyasonika/art/Asuka-Langley-Beach-Time-590134861", "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/943f66cb-78ad-40f2-a086-44420b98b431/d9rcmz1-5cbc5670-0193-485b-ac14-755ddb9562f4.jpg/v1/fill/w_1024,h_732,q_75,strp/asuka_langley_beach_time_by_nadyasonika_d9rcmz1-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NzMyIiwicGF0aCI6IlwvZlwvOTQzZjY2Y2ItNzhhZC00MGYyLWEwODYtNDQ0MjBiOThiNDMxXC9kOXJjbXoxLTVjYmM1NjcwLTAxOTMtNDg1Yi1hYzE0LTc1NWRkYjk1NjJmNC5qcGciLCJ3aWR0aCI6Ijw9MTAyNCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.M-a_heYtVPwnR4eC9KIPk2mIYeNzEaTg4b4jqr_GwyI"],
687
+ ["https://www.deviantart.com/nadyasonika/art/Asuka-Langley-Beach-Time-590134861", "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/943f66cb-78ad-40f2-a086-44420b98b431/d9rcmz1-5cbc5670-0193-485b-ac14-755ddb9562f4.jpg/v1/fill/w_1024,h_732,q_75,strp/asuka_langley_beach_time_by_nadyasonika_d9rcmz1-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOiIsImlzcyI6InVybjphcHA6Iiwib2JqIjpbW3siaGVpZ2h0IjoiPD03MzIiLCJwYXRoIjoiXC9mXC85NDNmNjZjYi03OGFkLTQwZjItYTA4Ni00NDQyMGI5OGI0MzFcL2Q5cmNtejEtNWNiYzU2NzAtMDE5My00ODViLWFjMTQtNzU1ZGRiOTU2MmY0LmpwZyIsIndpZHRoIjoiPD0xMDI0In1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmltYWdlLm9wZXJhdGlvbnMiXX0.L6OhXuQZ_9ovKOdjjuQbvxpD0mG8M_KiqV4ljEDfW3Q"],
688
+ ["https://calgary.skyrisecities.com/news/2019/11/blue-morning-light", "https://cdn.skyrisecities.com/sites/default/files/images/articles/2019/11/39834/39834-132071.jpg"], # og:image without scheme
689
+ ["https://www.reddit.com/r/darksouls3/comments/e59djh/hand_it_over_that_thing_your_wallpaper/", DirectLink::ErrorBadLink, true],
690
+ ["https://www.reddit.com/r/darksouls3/comments/e59djh/hand_it_over_that_thing_your_wallpaper/", 6],
683
691
  ].each_with_index do |(input, expectation, giveup), i|
684
692
  it "##{i + 1} (#{URI(input).host}) (giveup=#{!!giveup})" do # to match with minitest `-n` run flag
685
- ti = ENV.delete "IMGUR_CLIENT_ID"
686
- tr = ENV.delete "REDDIT_SECRETS"
693
+ ti = ENV.delete "IMGUR_CLIENT_ID" if %w{ imgur com } == URI(input).host.split(?.).last(2)
694
+ tr = ENV.delete "REDDIT_SECRETS" if %w{ reddit com } == URI(input).host.split(?.).last(2)
687
695
  begin
688
696
  case expectation
689
697
  when Class
690
698
  e = assert_raises expectation, "for #{input} (giveup = #{giveup})" do
691
- DirectLink input, nil, giveup: giveup
699
+ DirectLink input, 10, giveup: giveup
692
700
  end
693
701
  assert_equal expectation.to_s, e.class.to_s, "for #{input} (giveup = #{giveup})"
694
702
  when String
695
- result = DirectLink input, nil, giveup: giveup
703
+ result = DirectLink input, 10, giveup: giveup
696
704
  assert_equal expectation, result.url, "for #{input} (giveup = #{giveup})"
697
705
  else
698
- result = DirectLink input, nil, giveup: giveup
706
+ result = DirectLink input, 10, giveup: giveup
699
707
  result = [result] unless result.is_a? Array # we can't do `Array(<Struct>)` because it splats by elements
700
708
  assert_equal expectation, result.size, ->{
701
709
  "for #{input} (giveup = #{giveup}): #{result.map &:url}"
702
710
  }
703
711
  end
704
712
  ensure
705
- ENV["IMGUR_CLIENT_ID"] = ti
706
- ENV["REDDIT_SECRETS"] = tr
713
+ ENV["IMGUR_CLIENT_ID"] = ti if ti
714
+ ENV["REDDIT_SECRETS"] = tr if tr
707
715
  end
708
716
  end
709
717
  end
@@ -816,7 +824,7 @@ describe DirectLink do
816
824
  end
817
825
  it "ignores <meta> tag" do
818
826
  string, status = Open3.capture2e "RUBYOPT='-rbundler/setup' ./bin/directlink --json --ignore-meta https://www.kp.ru/daily/26342.7/3222103/"
819
- assert_equal [0, 21, "https://s11.stc.all.kpcdn.net/share/i/12/8024261/wx1080.jpg"], [status.exitstatus, JSON.load(string).size, JSON.load(string).first.fetch("url")]
827
+ assert_equal [0, 21, "https://s11.stc.all.kpcdn.net/share/i/12/8024261/inx960x640.jpg"], [status.exitstatus, JSON.load(string).size, JSON.load(string).first.fetch("url")]
820
828
  end
821
829
 
822
830
  end
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.8.5
4
+ version: 0.0.9.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: 2019-11-18 00:00:00.000000000 Z
11
+ date: 2020-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastimage
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.3.3.0
47
+ version: 0.4.0.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.3.3.0
54
+ version: 0.4.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: reddit_bot
57
57
  requirement: !ruby/object:Gem::Requirement