scRUBYtで刺激を受けたのでスクレイピングの練習がてらrubyのmerchanizeとHpricotを使ってcheckpadのTodoリストをテキストに落とすスクリプトを作ってみました。
checkpadは共有・公開も出来るWebアプリのTodoリストで、とてもシンプルながら逆にそれが使いやすい便利なサービスです。携帯からメモ代わりにいろいろ書き込んだり、PCではサイドバーに開くようにしたりして使わせてもらっています。日本で作られたサービスなので携帯の文字化けも皆無ですし、一度使ってみてはいかがでしょうか。
checkpad単体で十分便利なのですが、やはりオフラインで見たいケースも出てきます。そこでまずはリストだけでもテキストファイルに落としてみることにしました。
firefoxの拡張機能firebugでcheckpadのhtmlを確認しつつスクレイピングスクリプトを作成。rubyは慣れてないのでダサいコードには目をつむってください。
まだ終わっていないTodoの一覧を取り出すことが出来ます。半角カナは文字化けします。
require 'mechanize'
require 'kconv'
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Linux Mozilla'
page = agent.get("http://www.checkpad.jp/")
login_form = page.forms[0];
login_form.fields.find {|f| f.name == 'login_email'}.value = "<my@account.ne.jp>"
login_form.fields.find {|f| f.name == 'login_pwd'}.value = "<Password>"
top_page = agent.submit(login_form).root
lists = top_page/"div#leftside li:not(.add)"
(lists/:a).each do |e|
print e.inner_text.toutf8.strip,"\n"
todolist_page = agent.get("http://www.checkpad.jp" + e[:href]).root
todolist = todolist_page/"div#leftside > div#ms_box_notyet div.citem_editable"
todolist.each do |todo|
todo_ent = (todo/:div).first
todo_ent.search("div").remove
print " ",todo_ent.inner_text.toutf8.strip, "\n"
end
end
rssに出力したらplagger/prhagger/praggerな恩恵が受けれそうですし、iCalendarで出力したらもっと幸せになれそうです。というわけで今日はここまで。