This commit is contained in:
albert
2011-12-30 16:30:32 -05:00
parent dec514fe2b
commit 365e04bb40
3 changed files with 36 additions and 7 deletions

View File

@@ -30,6 +30,10 @@ module Downloads
def after_download
fix_image_board_sources
end
def url
URI.parse(source)
end
def http_get_streaming(options = {})
max_size = options[:max_size] || Danbooru.config.max_file_size
@@ -37,19 +41,17 @@ module Downloads
limit = 4
while true
url = URI.parse(source)
unless url.is_a?(URI::HTTP)
raise Error.new("URL must be HTTP")
end
headers = {
"User-Agent" => "#{Danbooru.config.safe_app_name}/#{Danbooru.config.version}"
}
@source, headers = before_download(source, headers)
Net::HTTP.start(url.host, url.port) do |http|
http.read_timeout = 10
headers = {
"User-Agent" => "#{Danbooru.config.safe_app_name}/#{Danbooru.config.version}"
}
@source, headers = before_download(@source, headers)
url = URI.parse(source)
http.request_get(url.request_uri, headers) do |res|
case res
when Net::HTTPSuccess then

View File

@@ -4,6 +4,7 @@ module Downloads
def rewrite(url, headers)
if url =~ /https?:\/\/(?:\w+\.)?pixiv\.net/
url, headers = rewrite_headers(url, headers)
url, headers = rewrite_html_pages(url, headers)
url, headers = rewrite_small_images(url, headers)
url, headers = rewrite_small_manga_pages(url, headers)
end
@@ -17,6 +18,18 @@ module Downloads
return [url, headers]
end
def rewrite_html_pages(url, headers)
# example: http://www.pixiv.net/member_illust.php?mode=big&illust_id=23828655
if url =~ %r!illust_id=\d+!
source = ::Sources::Strategies::Pixiv.new(url)
source.get
return [source.image_url, headers]
else
return [url, headers]
end
end
def rewrite_small_images(url, headers)
if url =~ %r!(/img/.+?/.+?)_m.+$!
match = $1

View File

@@ -15,6 +15,20 @@ module Downloads
end
end
context "a download for a html page" do
setup do
@source = "http://www.pixiv.net/member_illust.php?mode=big&illust_id=23828655"
@source = "http://www.pixiv.net/member_illust.php?mode=big&illust_id=4348318"
@tempfile = Tempfile.new("danbooru-test")
@download = Downloads::File.new(@source, @tempfile.path)
@download.download!
end
should "work" do
assert_equal(185778, ::File.size(@tempfile.path))
end
end
context "a download for a small image" do
setup do
@source = "http://img02.pixiv.net/img/wanwandoh/4348318_m.jpg"