WWW::MechanizeでFlickrに画像をアップロードする

作りかけだけど、とりあえず動くのでBlogに書いておく。WWW::Mechanizeのサイトに書かれているサンプルが、昔からのFlickrアカウントをもっている人しか使えないので、YahooのログインIDでアップロード出来るコードを書いた。こんな物は誰かBlogで書いているだろうと探したのだけど、見つからなかった。
はてなダイアリーにアップロードするスクリプトから使うため、クラス定義している。これだけだと、loginとuploadを別メソッドにする必要は無いんだよなぁ。実装を進めて、必要がなければ1つにしてしまう。

#!/usr/bin/env ruby
require 'rubygems'
require 'mechanize'

class HatenaFlickrWriter
  def initialize(id,password)
    @id = id
    @password = password
    @agent = WWW::Mechanize.new
    @page = ""
  end

  # By yahoo login ID, password
  def login
    @page = @agent.get('http://flickr.com/signin/')
    form  = @page.forms.name('login_form').first
    form.login = @id
    form.passwd = @password
    @page = @agent.submit(form)
    @page = @agent.click @page.links.text('click here')
    @page = @agent.click @page.links.text('Upload')
    @page = @agent.click @page.links.text("basic Uploader")
  end
  def upload(filename)
    form  = @page.forms.action('http://up.flickr.com/photos/upload/transfer/').first
    form.file_uploads.name('file1').first.file_name = filename
    @agent.submit(form)
  end
end

# test code
if __FILE__ == $0
  flickr = HatenaFlickrWriter.new('LOGIN ID','PASSWORD')
  flickr.login
  fname = ARGV.shift
  flickr.upload(fname)
end