O'ReillyのiPhone AppからEPUBファイルを抽出するRubyスクリプト【Windows版】
404 Blog Not Found:perl - O'ReillyのiPhoneアプリ本からepubをぶっこぬくを参考に、Ruby版を作ってみるテストのWindows版です。
Windowsにはzip/unzipコマンドがないので、ziprubyライブラリを使ってみました。
require "fileutils" require "zipruby" def clean FileUtils.rmtree('Payload') end def die(message) puts message exit(1) end def zip_add_dir_r(zipfile, dir) Zip::Archive.open(zipfile) do |ar| ar.add_dir(dir) Dir.glob("#{dir}/**/*").each do |path| if File.directory?(path) ar.add_dir(path) else ar.add_file(path, path) end end end end $src = ARGV.shift die "Usage:#{$0} src.ipa [dst.epub]" unless $src && File.exist?($src) $dst = ARGV.shift unless $dst $dst = File.basename($src) $dst = $dst.sub(/\w+$/, 'epub') end Zip::Archive.open($src) do |ar| ar.each do |zf| if zf.directory? FileUtils.mkdir_p(zf.name) else next if zf.name =~ /iTunes/ dirname = File.dirname(zf.name) FileUtils.mkdir_p(dirname) unless File.exist?(dirname) open(zf.name, 'wb') do |f| f << zf.read end end end end $app = Dir.glob("Payload/*.app/book").first die "No book found in the archive" unless $app Dir.chdir($app) do |path| $updir = '../../..' Zip::Archive.open("#{$updir}/#{$dst}", Zip::CREATE, Zip::BEST_SPEED) do |ar| ar.add_file('mimetype') end zip_add_dir_r("#{$updir}/#{$dst}", 'META-INF') zip_add_dir_r("#{$updir}/#{$dst}", 'OEBPS') end clean
iTunesに登録するところは、手動でどうぞ。