ある問題の解決方法が思いつかなかったので、Flickr APIを使う事に方針変更する。このまま捨てるのも勿体ないのでWWW::MechanizeでFlickrに画像をアップロードする - ちょっと待っての日記をWWW:Mechanizeの0.9に対応したサンプルコードです。
この日記を更新してFlickrへアップロードしているスクリプトで余計な部分*1をのぞいています。
しかし、Mechanize 0.9は取っつき難いなぁ。慣れてしまえば、判りやすいんだけど。
require 'rubygems' require 'mechanize' # Exif 除去 ##require 'RMagick' ##require 'tempfile' class HatenaFlickrWriter def initialize(id, pass) @AGENT = WWW::Mechanize.new @id = id @password = pass end # By yahoo login ID, password def login page = @AGENT.get('http://flickr.com/signin/') page.form_with(:name => "login_form") { |fm| fm.set_fields("login" => [@id], "passwd" => [@password]) z = fm.click_button z.link_with(:text => 'click here').click # redirect } end # Basic uploader supports 6 files. UPLOAD_FILE_INBOX = ["file1","file2","file3","file4","file5","file6"] def upload(filenames) page = @AGENT.get('http://flickr.com/') x1 = page.link_with(:text => "Upload").click x2 = x1.link_with(:text => "basic Uploader").click x2.form_with(:action => 'http://up.flickr.com/photos/upload/transfer/') { |form| filenames.each_with_index { |fname, index| if index >= UPLOAD_FILE_INBOX.size p "#{UPLOAD_FILE_INBOX.size} ファイルが上限です" break end tmp = UPLOAD_FILE_INBOX[index] ## form.file_upload_with(:name => tmp).file_name = strip_exif(fname) form.file_upload_with(:name => tmp).file_name = fname } form.radiobuttons[1].check # Public (anyone can see them) form.click_button } end private # jpegのexif情報を取り除いて、tmpディレクトリに保存する ## def strip_exif(fname) ## img = Magick::ImageList.new(fname) ## img.strip! ## ofile = Dir.tmpdir + File::Separator + fname ## img.write(ofile) ## return ofile ## end end # test code if __FILE__ == $0 flickr = HatenaFlickrWriter.new('LOGIN ID','PASSWORD') flickr.login fname = [] ARGV.each { |f| fname.push f } flickr.upload(fname) end