Fix #3906: Moebooru strategy raises NotImplementedError.
This commit is contained in:
@@ -43,8 +43,14 @@ module Sources
|
|||||||
@referer_url = referer_url
|
@referer_url = referer_url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def urls
|
||||||
|
[url, referer_url].select(&:present?)
|
||||||
|
end
|
||||||
|
|
||||||
def site_name
|
def site_name
|
||||||
raise NotImplementedError
|
Addressable::URI.heuristic_parse(url).host
|
||||||
|
rescue Addressable::URI::InvalidURIError => e
|
||||||
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Whatever <tt>url</tt> is, this method should return the direct links
|
# Whatever <tt>url</tt> is, this method should return the direct links
|
||||||
|
|||||||
@@ -1,24 +1,28 @@
|
|||||||
module Sources
|
module Sources
|
||||||
module Strategies
|
module Strategies
|
||||||
class Moebooru < Base
|
class Moebooru < Base
|
||||||
DOMAINS = /(?:[^.]+\.)?yande\.re|konachan\.com/
|
BASE_URL = %r!\Ahttps?://(?:[^.]+\.)?(?<domain>yande\.re|konachan\.com)!i
|
||||||
|
|
||||||
def self.match?(*urls)
|
def self.match?(*urls)
|
||||||
urls.compact.any? { |x| x.match?(DOMAINS) }
|
urls.compact.any? { |x| x.match?(BASE_URL) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def site_name
|
def site_name
|
||||||
URI.parse(url).host
|
urls.map { |url| url[BASE_URL, :domain] }.compact.first
|
||||||
end
|
end
|
||||||
|
|
||||||
def image_url
|
def image_url
|
||||||
if url =~ %r{\A(https?://(?:#{DOMAINS}))/jpeg/([a-f0-9]+(?:/.*)?)\.jpg\Z}
|
if url =~ %r{\A(?<base>#{BASE_URL})/jpeg/(?<md5>\h+(?:/.*)?)\.jpg\Z}
|
||||||
return $1 + "/image/" + $2 + ".png"
|
return $~[:base] + "/image/" + $~[:md5] + ".png"
|
||||||
end
|
end
|
||||||
|
|
||||||
return url
|
return url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def image_urls
|
||||||
|
[image_url]
|
||||||
|
end
|
||||||
|
|
||||||
def page_url
|
def page_url
|
||||||
return url
|
return url
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -29,12 +29,6 @@ module Sources
|
|||||||
url
|
url
|
||||||
end
|
end
|
||||||
|
|
||||||
def site_name
|
|
||||||
URI.parse(url).hostname || "N/A"
|
|
||||||
rescue
|
|
||||||
"N/A"
|
|
||||||
end
|
|
||||||
|
|
||||||
def unique_id
|
def unique_id
|
||||||
url
|
url
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,12 +2,23 @@ require "test_helper"
|
|||||||
|
|
||||||
module Sources
|
module Sources
|
||||||
class MoebooruTest < ActiveSupport::TestCase
|
class MoebooruTest < ActiveSupport::TestCase
|
||||||
context "downloading a 'https://yande.re/jpeg/:hash/:file.jpg' jpeg sample url" do
|
context "Yande.re:" do
|
||||||
should "download the original file" do
|
context "A 'https://yande.re/jpeg/:hash/:file.jpg' jpeg sample url" do
|
||||||
@source = "https://yande.re/jpeg/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.jpg"
|
should "download the original file" do
|
||||||
@rewrite = "https://yande.re/image/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.png"
|
@source = "https://yande.re/jpeg/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.jpg"
|
||||||
assert_rewritten(@rewrite, @source)
|
@rewrite = "https://yande.re/image/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.png"
|
||||||
assert_downloaded(1_050_117, @source)
|
assert_rewritten(@rewrite, @source)
|
||||||
|
assert_downloaded(1_050_117, @source)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "A 'https://files.yande.re/sample/:hash/:file.jpg' sample url" do
|
||||||
|
should "work" do
|
||||||
|
@site = Sources::Strategies.find("https://files.yande.re/sample/7ecfdead705d7b956b26b1d37b98d089/yande.re%20482880%20sample%20bayashiko%20journey_to_the_west%20sun_wukong.jpg")
|
||||||
|
|
||||||
|
assert_equal("yande.re", @site.site_name)
|
||||||
|
assert_nothing_raised { @site.to_h }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user