directlink 0.0.7.0 → 0.0.8.0

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: 82fb69a1c4a926a14a776f62c647ca40cb4ffcbb
4
- data.tar.gz: 904eafe032fcd4947770212b0e97788102b41811
3
+ metadata.gz: 1ed510f04f8bd32fadeb16a4ea27d1133dc8946e
4
+ data.tar.gz: bf1afde92343fc551abbf6b10902745842dfe496
5
5
  SHA512:
6
- metadata.gz: 4d9e95ecb4fec1fd2e7b633b1e7c817a187ab3078af80e2721d2f6e15f7c8da031963c35891dbc36dd1eb9d1681b999abe8421f520e8a0bbe8968dc6a8b23b7d
7
- data.tar.gz: 244fcccee54d13bd4e2c7d219c67b92174441fe034fee6098c158947d1d278bc58fdcc6c3a53b3831dad419eb70f88fbe6ace14688535d4c23a86be028f0d905
6
+ metadata.gz: a2612ddaf05fe8ea4158806d00be6209455772c004d33373bacbe00ffc1cc538aee9c4dade3d84f24c7052e0ec3ed38db0b48192c939c346c590d9d47428bcda
7
+ data.tar.gz: 647f789a878dd956827ab402ebd0a8147e81c8951e8389eddc1be57c158e33a9cbdaea4d08da604249907d0a094c0966cdf34dafb0376fbcc53414efc170cd8b
@@ -1,3 +1,8 @@
1
1
  export IMGUR_CLIENT_ID=0f99cd781c9d0d8
2
2
  export FLICKR_API_KEY=dc2bfd348b01bdc5b09d36876dc38f3d
3
3
  export REDDIT_SECRETS=reddit_token_for_travis.yaml
4
+
5
+ touch vk.secret
6
+ source vk.secret
7
+ # export VK_ACCESS_TOKEN=... # can't put this here because there is no way known to me to limit the scope of the eternal access token
8
+ # export VK_CLIENT_SECRET=... # (service key) # can't put this here because there is no way known to me to limit the scope of the eternal access token
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "directlink"
3
- spec.version = "0.0.7.0"
3
+ spec.version = "0.0.8.0"
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"
@@ -25,5 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.files = `git ls-files -z`.split(?\0) - spec.test_files
26
26
 
27
27
  spec.requirements << "you may need to create apps and provide their API tokens:"
28
- spec.requirements << "IMGUR_CLIENT_ID, FLICKR_API_KEY"
28
+ spec.requirements << "IMGUR_CLIENT_ID, FLICKR_API_KEY, REDDIT_SECRETS"
29
29
  end
@@ -241,6 +241,17 @@ module DirectLink
241
241
  return [false, data["selftext"]]
242
242
  end
243
243
 
244
+ def self.vk link
245
+ raise ErrorBadLink.new link unless %r{\Ahttps?://vk\.com/id(?<user_id>\d+)\?z=photo(?<id>\k<user_id>_\d+)\z} =~ link
246
+ raise ErrorMissingEnvVar.new "define VK_ACCESS_TOKEN and VK_CLIENT_SECRET env vars" unless ENV["VK_ACCESS_TOKEN"] && ENV["VK_CLIENT_SECRET"]
247
+ json = JSON.load NetHTTPUtils.request_data "https://api.vk.com/method/photos.getById", :POST, form: { photos: id, access_token: ENV["VK_ACCESS_TOKEN"], client_secret: ENV["VK_CLIENT_SECRET"], v: "5.101" }
248
+ json.fetch("response").tap do |r|
249
+ raise ErrorAssert.new unless 1 == r.size
250
+ end.first.fetch("sizes").map do |s|
251
+ s.values_at "width", "height", "url"
252
+ end.max_by{ |w, h, u| w * h }
253
+ end
254
+
244
255
  class_variable_set :@@directlink, Struct.new(:url, :width, :height, :type)
245
256
  end
246
257
 
@@ -291,6 +302,8 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup: false, ig
291
302
  max_read_retry_delay: max_redirect_resolving_retry_delay
292
303
  } : {})
293
304
  rescue Net::ReadTimeout
305
+ rescue NetHTTPUtils::Error => e
306
+ raise unless 418 == e.code
294
307
  else
295
308
  link = head.instance_variable_get(:@last_response).uri.to_s
296
309
  end
@@ -350,6 +363,12 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup: false, ig
350
363
  end if %w{ reddit com } == URI(link).host.split(?.).last(2) ||
351
364
  %w{ redd it } == URI(link).host.split(?.)
352
365
 
366
+ begin
367
+ w, h, u = DirectLink.vk(link)
368
+ return struct.new u, w, h
369
+ rescue DirectLink::ErrorMissingEnvVar
370
+ end if %w{ vk com } == URI(link).host.split(?.)
371
+
353
372
  begin
354
373
  f = FastImage.new(link, raise_on_failure: true, timeout: 5, http_header: {"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"})
355
374
  rescue FastImage::UnknownImageType
data/test.rb CHANGED
@@ -394,6 +394,9 @@ describe DirectLink do
394
394
  ["https://www.reddit.com/r/CatsStandingUp/duplicates/abn0ua/cat/", [true, "https://v.redd.it/s9b86afb6w721/DASH_2_4_M?source=fallback"]],
395
395
  ["https://www.reddit.com/r/hangers/comments/97you5/tara_radovic/", [true, "https://i.imgur.com/rbLqgOu.jpg"]], # "crossport" from Imgur
396
396
  ] ],
397
+ [ :vk, [
398
+ ["https://vk.com/id57030827?z=photo57030827_456241143", [1920, 1440, "https://sun9-66.userapi.com/c845322/v845322944/167836/bP9z41BybhI.jpg"]],
399
+ ] ],
397
400
  ].each do |method, tests|
398
401
  describe method do
399
402
  tests.each_with_index do |(input, expectation), i|
@@ -445,6 +448,9 @@ describe DirectLink do
445
448
  # ["https://www.reddit.com/r/travel/988889", "https://www.reddit.com/r/travel/comments/988889/playa_miramar_in_guaymas_sonora/"],
446
449
  "https://www.reddit.com/r/KsyushaEgorova/comments/beuqs2/a_little_shy/", # NSFW causes redirect to /over_18? if the special cookie not provided
447
450
  ],
451
+ vk: [
452
+ "https://vk.com/id57030827?z=photo57030827_456241143",
453
+ ],
448
454
  }.each do |method, tests|
449
455
  describe "DirectLink() calls #{method}" do
450
456
  tests.each_with_index do |(input, expected), i|
@@ -514,7 +520,7 @@ describe DirectLink do
514
520
  end
515
521
 
516
522
  describe "throws ErrorBadLink if method does not match the link" do
517
- %i{ google imgur flickr _500px wiki reddit }.each do |method|
523
+ %i{ google imgur flickr _500px wiki reddit vk }.each do |method|
518
524
  ["", "test", "http://example.com/"].each_with_index do |url, i|
519
525
  it "#{method} ##{i + 1}" do
520
526
  assert_raises DirectLink::ErrorBadLink do
@@ -617,6 +623,7 @@ describe DirectLink do
617
623
  [:_500px, "https://500px.com/photo/112134597/milky-way-by-tom-hall"],
618
624
  [:wiki, "http://commons.wikimedia.org/wiki/File:Eduard_Bohlen_anagoria.jpg"],
619
625
  [:reddit, "https://www.reddit.com/123456"],
626
+ [:vk, "https://vk.com/"],
620
627
  ].each do |method, link|
621
628
  it "can otherwise raise DirectLink::ErrorBadLink #{method}" do
622
629
  e = assert_raises(DirectLink::ErrorBadLink, link) do
@@ -739,7 +746,7 @@ describe DirectLink do
739
746
  # TODO: a test that it appends the `exception.cause`
740
747
  ].each_with_index do |(expected_exit_code, link, expected_output, unset), i| # TODO: unset is not used anymore or I have to go sleep?
741
748
  it "##{i + 1}" do
742
- string, status = Open3.capture2e "export #{File.read("api_tokens_for_travis.sh").gsub(/\n?export/, ?\s).strip}#{unset} && RUBYOPT='-rbundler/setup #{$-I.map{ |i| "-I #{i}" }.join " "}' ./bin/directlink #{link}"
749
+ string, status = Open3.capture2e "export #{(File.read("api_tokens_for_travis.sh") + File.read("vk.secret")).scan(/(?<=^export )\S+=\S+/).join(" ")}#{unset} && RUBYOPT='-rbundler/setup #{$-I.map{ |i| "-I #{i}" }.join " "}' ./bin/directlink #{link}"
743
750
  assert_equal [expected_exit_code, "#{expected_output}\n"], [status.exitstatus, string], "for #{link}"
744
751
  end
745
752
  end
@@ -782,7 +789,7 @@ describe DirectLink do
782
789
  '.gsub(/^ {8}/, ""), "json"],
783
790
  ].each do |expected_output, param|
784
791
  it "#{param || "default"} output format" do
785
- string, status = Open3.capture2e "export #{File.read("api_tokens_for_travis.sh").gsub(/\n?export/, ?\s).strip} && RUBYOPT='-rbundler/setup' ./bin/directlink#{" --#{param}" if param} #{valid_imgur_image_url1} #{valid_imgur_image_url2}"
792
+ string, status = Open3.capture2e "export #{(File.read("api_tokens_for_travis.sh") + File.read("vk.secret")).scan(/(?<=^export )\S+=\S+/).join(" ")} && RUBYOPT='-rbundler/setup' ./bin/directlink#{" --#{param}" if param} #{valid_imgur_image_url1} #{valid_imgur_image_url2}"
786
793
  assert_equal [0, expected_output], [status.exitstatus, string]
787
794
  end
788
795
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directlink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7.0
4
+ version: 0.0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov aka Nakilon
@@ -163,9 +163,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  requirements:
165
165
  - 'you may need to create apps and provide their API tokens:'
166
- - IMGUR_CLIENT_ID, FLICKR_API_KEY
166
+ - IMGUR_CLIENT_ID, FLICKR_API_KEY, REDDIT_SECRETS
167
167
  rubyforge_project:
168
- rubygems_version: 2.6.14.4
168
+ rubygems_version: 2.5.2.3
169
169
  signing_key:
170
170
  specification_version: 4
171
171
  summary: converts any kind of image hyperlink to direct link, type of image and its