From 50730c6d0d052ed023bb486768989d14d9a77dd4 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 6 Oct 2014 00:01:50 -0700 Subject: [PATCH] implement ugoira converter --- Gemfile | 2 +- app/logical/pixiv_ugoira_converter.rb | 16 +- .../vcr_cassettes/ugoira-converter.yml | 631 ++++++++++++++++++ test/unit/pixiv_ugoira_converter_test.rb | 60 ++ 4 files changed, 701 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/vcr_cassettes/ugoira-converter.yml create mode 100644 test/unit/pixiv_ugoira_converter_test.rb diff --git a/Gemfile b/Gemfile index e11c0099b..7e37cd83b 100644 --- a/Gemfile +++ b/Gemfile @@ -43,7 +43,7 @@ gem 'capistrano' gem 'capistrano-ext' gem 'radix62', '~> 1.0.1' gem 'streamio-ffmpeg' -gem 'rubyzip' +gem 'rubyzip', :require => "zip" # needed for looser jpeg header compat gem 'ruby-imagespec', :require => "image_spec", :git => "https://github.com/r888888888/ruby-imagespec.git", :branch => "exif-fixes" diff --git a/app/logical/pixiv_ugoira_converter.rb b/app/logical/pixiv_ugoira_converter.rb index bc964ed95..b574908c3 100644 --- a/app/logical/pixiv_ugoira_converter.rb +++ b/app/logical/pixiv_ugoira_converter.rb @@ -1,13 +1,14 @@ class PixivUgoiraConverter - attr_reader :agent, :url, :write_path + attr_reader :agent, :url, :write_path, :format - def initialize(agent, url, write_path) + def initialize(agent, url, write_path, format) @agent = agent @url = url @write_path = write_path + @format = format end - def process(format) + def process folder = unpack(fetch_zipped_body) if format == :gif @@ -34,7 +35,7 @@ class PixivUgoiraConverter end anim = anim.optimize_layers(Magick::OptimizeTransLayer) - anim.write(write_path) + anim.write("gif:" + write_path) end def write_webm(folder) @@ -49,11 +50,12 @@ class PixivUgoiraConverter end # Duplicate last frame to avoid it being displayed only for a very short amount of time. - folder.to_a.last.name =~ /\A(\d{6})(\..+)\Z/ + last_file_name = folder.to_a.last.name + last_file_name =~ /\A(\d{6})(\..+)\Z/ new_last_index = $1.to_i + 1 file_ext = $2 new_last_filename = ("%06d" % new_last_index) + file_ext - path_from = File.join(tmpdir, "images", folder.to_a.last.name) + path_from = File.join(tmpdir, "images", last_file_name) path_to = File.join(tmpdir, "images", new_last_filename) FileUtils.cp(path_from, path_to) @@ -68,7 +70,7 @@ class PixivUgoiraConverter f.write("#{delay_sum}\n") f.write("#{delay_sum}\n") end - + ext = folder.first.name.match(/\.(.+)$/)[1] system("ffmpeg -i #{tmpdir}/images/%06d.#{ext} -codec:v libvpx -crf 4 -b:v 5000k -an #{tmpdir}/tmp.webm") system("mkvmerge -o #{write_path} --timecodes 0:#{tmpdir}/timecodes.tc #{tmpdir}/tmp.webm") diff --git a/test/fixtures/vcr_cassettes/ugoira-converter.yml b/test/fixtures/vcr_cassettes/ugoira-converter.yml new file mode 100644 index 000000000..5a454b700 --- /dev/null +++ b/test/fixtures/vcr_cassettes/ugoira-converter.yml @@ -0,0 +1,631 @@ +--- +http_interactions: +- request: + method: get + uri: http://www.pixiv.net/member_illust.php?illust_id=46378654&mode=medium + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - ! '*/*' + User-Agent: + - Mechanize/2.7.2 Ruby/1.9.3p327 (http://github.com/sparklemotion/mechanize/) + Accept-Encoding: + - gzip,deflate,identity + Accept-Charset: + - ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Accept-Language: + - en-us,en;q=0.5 + Cookie: + - !binary |- + UEhQU0VTU0lEPTBhNjNhNTMwOTI2MDQ5NzVkNTliZTM4ZTJkMDcwZTY3OyBw + X2FiX2lkPTk= + Host: + - www.pixiv.net + Connection: + - keep-alive + Keep-Alive: + - 300 + response: + status: + code: 200 + message: !binary |- + T0s= + headers: + !binary "U2VydmVy": + - !binary |- + bmdpbng= + !binary "RGF0ZQ==": + - !binary |- + U3VuLCAwNSBPY3QgMjAxNCAyMjozMzoxOSBHTVQ= + !binary "Q29udGVudC1UeXBl": + - !binary |- + dGV4dC9odG1sOyBjaGFyc2V0PVVURi04 + !binary "VHJhbnNmZXItRW5jb2Rpbmc=": + - !binary |- + Y2h1bmtlZA== + !binary "Q29ubmVjdGlvbg==": + - !binary |- + a2VlcC1hbGl2ZQ== + !binary "VmFyeQ==": + - !binary |- + QWNjZXB0LUVuY29kaW5n + !binary "WC1Ib3N0LVRpbWU=": + - !binary |- + MTM4 + !binary "RXhwaXJlcw==": + - !binary |- + VGh1LCAxOSBOb3YgMTk4MSAwODo1MjowMCBHTVQ= + !binary "Q2FjaGUtQ29udHJvbA==": + - !binary |- + bm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hl + Y2s9MCwgcHJlLWNoZWNrPTA= + !binary "UHJhZ21h": + - !binary |- + bm8tY2FjaGU= + !binary "WC1GcmFtZS1PcHRpb25z": + - !binary |- + U0FNRU9SSUdJTg== + !binary "Q29udGVudC1FbmNvZGluZw==": + - !binary |- + Z3ppcA== + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + RAUBpGiuEXh3Vv6aA0xJJvlC/qIXEF7yIb7RA5Ky8gkLXHok2Uo91rmMYaAh + 2mWLVuWCQS/6A7eLzTi/mJVjzksezUT+wrLFeMI4fOBA+Dst6xmgeXJu5uqR + GX1u8MiNYM9pAlOHJv7z6f7IX5qdgfANp5DERn9EKEXmlSwTeUYATSoZTjlZ + LHwgysyA8rRmnqbd3OwcM0PNoOUPLPEEEeN5OUqHxCBhctpLxiwvc8S70yvH + jyPBPRQdSYw45ipDFAwqllY1wFxDG1Hxlh5QF0Bc4h0IJfw/1CF1xWO40nH9 + JdeFQSuiVcRua23fz7Q6XsPqpPH1iVzTtkvZXMkuZKvVQsHKV0sFu5grNis5 + 1y01eDcOVKS26t9nU/UcN2Y2batQsYpuuZJvVE3LbZaLdjWftbKVnF2uFmmj + 8CCNYeXmdpxitVFwiuWCVbLcXK5QyZarZatYrJbzjXyl6LDyfiCVuowlHUtk + 5eoDttt2RbPZouvkzHy10UDLzXyhaJUa2WbZxWMz28hR9w5cBi+0m1dTKfoR + oFB9cBSqjIObq5SzjlUqF/NOIV/M5xvFbN52LDvnVHJWng2oERwehN5DF0Y9 + 4iK7ZNlWs5k3s1apUipYbrFiwdZWyjeLpVLJZqvqgzQEWZPqeK12j1uDVdQp + W2ah4ZQKjWq25FSaFaecLeSqpp1tmnkaXp24PL5i82VgMQi2VLHz45qf6bQb + GRJJRX+pfSP8lr7mJxa1GRghoxzK1tAljsJw0uBiiPfYrH+jVcASMlhpeM5K + JvIr3XYrW1BIpaIctYfmmm1IDeortiY9AH6ikc0VcsVCtZg3LYgC2OLcpmWW + nGalWSiCnSOd33NDZO3rqaacRtUys8VstloswOILK7dVtpu5Sh6z0yqUMEE1 + Ou+5KRIDsk85u9C07EIuW2mUC1nLds1ysdG0m66D+QipEGlIjiF25HIM9zx8 + 1jXr5hJsY37mpjPYMlj61N9Dp4buzWHG5SEqQqhkzWy1kc9hkhfdbMWGODMb + hWK2jOmNeRbSbU/IC2YIp5kkX8XJYWhKTtEqF/L5glWuWuVcsVyuVvMNG0/1 + 9vbC6q0+/AHEc8WCY1XLOcux87mGUyyUMY8bdsFpNst2sdiIjI/q0OKM0EIc + TJSO1ydNkBRhq+O7R+QrMbPPY7OGN8KCciVzJTM54a+Qt+JKJqGq2bCHe72L + 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 + http_version: + recorded_at: Sun, 05 Oct 2014 22:33:20 GMT +- request: + method: get + uri: http://i1.pixiv.net/img-zip-ugoira/img/2014/10/05/23/42/23/46378654_ugoira1920x1080.zip + body: + encoding: US-ASCII + string: '' + headers: + Referer: + - http://pixiv.net + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - ! '*/*' + User-Agent: + - Ruby + response: + status: + code: 200 + message: !binary |- + T0s= + headers: + !binary "U2VydmVy": + - !binary |- + bmdpbng= + !binary "Q29udGVudC1UeXBl": + - !binary |- + YXBwbGljYXRpb24vemlw + !binary "Q29udGVudC1MZW5ndGg=": + - !binary |- + NjY2Mw== + !binary "Q29ubmVjdGlvbg==": + - !binary |- + a2VlcC1hbGl2ZQ== + !binary "TGFzdC1Nb2RpZmllZA==": + - !binary |- + U3VuLCAwNSBPY3QgMjAxNCAxNDozMTowNyBHTVQ= + !binary "RXhwaXJlcw==": + - !binary |- + U3VuLCAxOSBPY3QgMjAxNCAyMjozMjozNCBHTVQ= + !binary "Q2FjaGUtQ29udHJvbA==": + - !binary |- + bWF4LWFnZT0xMjA5NjAw + !binary "QWNjZXB0LVJhbmdlcw==": + - !binary |- + Ynl0ZXM= + !binary "WC1Db250ZW50LVR5cGUtT3B0aW9ucw==": + - !binary |- + bm9zbmlmZg== + !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu": + - !binary |- + Kg== + !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcw==": + - !binary |- + R0VULCBQT1NULCBPUFRJT05T + !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycw==": + - !binary |- + QWNjZXB0LCBDYWNoZS1Db250cm9sLCBJZi1Ob25lLU1hdGNoLCBJZi1Nb2Rp + ZmllZC1TaW5jZSwgT3JpZ2luLCBSYW5nZSwgWC1SZXF1ZXN0ZWQtV2l0aA== + !binary "QWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnM=": + - !binary |- + Q29udGVudC1MZW5ndGg= + !binary "QWNjZXNzLUNvbnRyb2wtTWF4LUFnZQ==": + - !binary |- + MjU5MjAwMA== + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + RUVwazI5GQYAABkGAAAKAAAAMDAwMDAyLmpwZ//Y/+AAEEpGSUYAAQEBAEgA + SAAA/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4S + EA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0L + DRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU + FBQUFBQU/8AAEQgAPAA8AwERAAIRAQMRAf/EABoAAQADAQEBAAAAAAAAAAAA + AAAFBgcECAn/xAAqEAABBAEFAAEEAgIDAAAAAAACAQMEBQYABxESExQIFSEi + FjEYMjM1Uv/EABgBAQADAQAAAAAAAAAAAAAAAAACBAUG/8QAIxEBAQABAwME + AwAAAAAAAAAAAAECAxESBAUxBhMUIUFRYf/aAAwDAQACEQMRAD8A+qegaBoG + gaBoGgaCJjZTVzMpscbald7qvhRrCTG8yTzYkG+2yfbjqvYor6cIqqnT8oiK + PII2U1czKbHG2pXe6r4UawkxvMk82JBvtsn246r2KK+nCKqp0/KIijyEtoGg + aBoGgaDyr9Ov0Z1+zm6e6VlcVGP3sDL6WFHdkQ6CHXVydn54y6+NBBTVmMkd + K5DFwj9iRTIzLlBDk+l/6SXtrN+dxs8yTCcHqZFyzXyaFvFYLfxKEg+dHejR + HCAHUIo6RDedRpkXTkGiDwK6Ddcp20yLIL2VPgbsZhjMV7r0qquJTHHY4FBX + osivddXsqKS9nC/JLxwnCIHVhWAXuK2rsuz3KyjMY5sq0MG7jVTbLZKQqjiL + EhMH2RBUeFNR4JeRVeFQLtoGgaBoMSxv6if5hOTKKyCg7ShTOTAtpESUltYv + F4uMux4PmjiRvJX0RSH1ePorTfn0ce47rvVXb+39fj27V5crZLdpxx5fu2zx + LLbJZJ/d4uafSampp+5PC2YFvpiG4VENtDsftsZz4bjIW6JEN9iaSDXSAQ1/ + ZqV2HyX+1NSaJBebdaDsVNoOgaBoGgaBoOJymr3piS3IMY5SKhI+TIqfKf0v + bjnlOE1n59v6PU1vkZ6ONz+ryuM33ni77b/X4TmpnJxmV2Uzc/YfCN24dv8A + fsfrzurCllUI5G1CYW0hxZDLrLgsSDAib/V93hPyP7lyioqouggidutwMk3T + 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 + AAAA + http_version: + recorded_at: Sun, 05 Oct 2014 22:33:22 GMT +recorded_with: VCR 2.9.0 diff --git a/test/unit/pixiv_ugoira_converter_test.rb b/test/unit/pixiv_ugoira_converter_test.rb new file mode 100644 index 000000000..d20763385 --- /dev/null +++ b/test/unit/pixiv_ugoira_converter_test.rb @@ -0,0 +1,60 @@ +require "test_helper" + +class PixivUgoiraConverterTest < ActiveSupport::TestCase + context "An ugoira converter" do + setup do + @url = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=46378654" + @agent = begin + mech = Mechanize.new + + phpsessid = Cache.get("pixiv-phpsessid") + if phpsessid + cookie = Mechanize::Cookie.new("PHPSESSID", phpsessid) + cookie.domain = ".pixiv.net" + cookie.path = "/" + mech.cookie_jar.add(cookie) + else + mech.get("http://www.pixiv.net") do |page| + page.form_with(:action => "/login.php") do |form| + form['pixiv_id'] = Danbooru.config.pixiv_login + form['pass'] = Danbooru.config.pixiv_password + end.click_button + end + phpsessid = mech.cookie_jar.cookies.select{|c| c.name == "PHPSESSID"}.first + Cache.put("pixiv-phpsessid", phpsessid.value, 1.month) if phpsessid + end + + mech + end + @write_file = Tempfile.new("output") + end + + teardown do + @write_file.unlink + end + + should "output to gif" do + @converter = PixivUgoiraConverter.new(@agent, @url, @write_file.path, :gif) + VCR.use_cassette("ugoira-converter", :record => :new_episodes) do + @converter.process + end + assert_operator(File.size(@converter.write_path), :>, 1_000) + end + + should "output to webm" do + @converter = PixivUgoiraConverter.new(@agent, @url, @write_file.path, :webm) + VCR.use_cassette("ugoira-converter", :record => :new_episodes) do + @converter.process + end + assert_operator(File.size(@converter.write_path), :>, 1_000) + end + + should "output to apng" do + @converter = PixivUgoiraConverter.new(@agent, @url, @write_file.path, :apng) + VCR.use_cassette("ugoira-converter", :record => :new_episodes) do + @converter.process + end + assert_operator(File.size(@converter.write_path), :>, 1_000) + end + end +end \ No newline at end of file