2008年 01月 07日

update hatena with mechanize

require "rubygems"
require "mechanize"
require "pit"

config = Pit.get("hatena.ne.jp", :require => {
	"username" => "username of hatena",
	"password" => "password of hatena",
	"diaryurl" => "http://d.hatena.ne.jp/[your id]/"
})

agent = WWW::Mechanize.new
page  = agent.get "https://www.hatena.ne.jp/login?backurl=http%3A%2F%2Fd.hatena.ne.jp%2F"

form             = page.forms.first
form["name"]     = config["username"]
form["password"] = config["password"]

page = agent.submit(form)

raise "Login failed.." unless page.forms.empty?

page = agent.get "http://h.hatena.ne.jp/"
rkm  = page.forms.last["rkm"]

page = agent.post config["diaryurl"], {
	"rkm"   => rkm,
	"title" => "test",
	"body"  => "test test from mechanize",
}
p page

inplace edit の API をたたく。g.hatena もおなじでできる (URL だけかえる)。はてなはサブアカでも更新できるので、スクリプトから更新するときは、専用のサブアカ作ってパスワード設定するほうがすこしだけ安全かも。

RKM ははてな全体で共通みたいなのでてきとうなところからとってきてる。ハイクだと URL にユーザ名が入らなくて手軽っぽい (config に id じゃなくてメールアドレスいれてもいけるとかいう意味で)。

shipit.rb の Step にしようとおもったけど微妙だったのでやめた……(ハイクへの通知だとサブアカでの発言になってしまう)