www::mechanizeによる画像のアップロード

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