http://d.hatena.ne.jp/kitamomonga/20080326/ruby_www_mechanize_form_fileuploadを参照して、しばらくやめていたはてなへの画像アップロードを試みてみた。で、どうやら上手く動くようになった。修正した関数がこれだ。引数のパラメータは何かはすぐにわかると思います。
HATENA_URL = "http://d.hatena.ne.jp" def submit(date, title, body, image="", opt=nil) edit_link = HATENA_URL + "/#{@id}/edit?date=" + date.strftime("%Y%m%d") edit_page = @agent.get(edit_link) edit_form = edit_page.forms.name("edit").first edit_form["year"] = date.year edit_form["month"] = date.month edit_form["day"] = date.day edit_form["title"] = title edit_form["body"] = body if !image.empty? && !edit_form.file_uploads.name("image").empty? edit_form.file_uploads.name("image").first.file_name = image edit_form["imagetitle"] = File.basename(image) #画像のタイトル end edit_form["trivial"] = "true" if opt != nil ok_button = edit_form.buttons.name("edit") @agent.submit(edit_form, ok_button) end
ポイントは以下の部分だった。結局、参照したページからたどったマニュアルのサンプルを参照することで解決した。以前にも調べたのだけど、見落としていたようだ。あと、同じ日に対する2回目以降のアップロードでは、すでに画像が登録されているためimageのformが無くなっていることを考慮する必要があった。
if !image.empty? && !edit_form.file_uploads.name("image").empty? edit_form.file_uploads.name("image").first.file_name = image edit_form["imagetitle"] = File.basename(image) #画像のタイトル end