mixi2gmail WWW::Mechanize 0.7.5/Hpricot 対応版
Posted by yoosee on Web at 2008-04-04 13:00 JST1 mixi2gmail
少し前から mixi のちょこちょこした変更もあって以前書いたmixi2gmail.rb の挙動が怪しくなっていたので、WWW::Mechanize 0.7.5 への対応も兼ねてコードを書き直した。最近のバージョンでは取得結果を Hpricot::Doc で返すようになり、XPath での検索も出来るようなので、以前の正規表現で切り出す形から XPath で抜き出す形に変更。画像の扱いもHTMLの中にインラインで表示されるよう、mixiアルバム画像貼り付けへの対応も含めて少しマシにした。また Mechanize が Net::* を上書きする挙動も無くなったようなので、ちゃんとNet::SMTP を使って送信する形に書き換えた。数日試したが、ちゃんと動いているっぽいので公開。(最新版はCodeReposより)挙動としては、基本的に Linux 前提で、~/.mixi/mixirc に幾つか設定を入れて実行すると、友達の日記を画像を含めて(添付として)指定したメールアドレスに 1日記 1 HTML メールとして送信する。次回実行は新しいものだけを対象にし、また除外リスト、ウォッチリストなどの設定も出来る。
WWW::Mechanize は以前にも書いたが、ログインが必要なウェブサービスからコンテンツを持ってくるなんて言う用途には手軽で便利だ。Hpricot は Htree を改良したっぽいコンセプトだが、そこそこ高速になっているし、non well-formed な HTML 相手に Xpath や css 指定が出来るのは便利。
この手の小物は trac を直してそっちで公開したいが、どうも腰が重い。
2 (追記ないし注意書)
初回挙動は new_friend_diary にいる全ユーザの list_diary から全日記を引っ張るので処理が相当長くなってしまう。時間が長すぎると、メモリを圧迫したり、画像取得に失敗する可能性がある。動作としては ~/.mixi/lastid.log にある数字より大きい view_diary.pl?id=.... の id の日記のみ取るようになるので、初回も適当な数字を入れておくのが無難かも…。ファイルが無いとエラーになるのはとりあえず 0 入れておいた。
ちなみにこういう挙動にしたのは、以前 mixi が new_friend_diary に 1ユーザ 1日記しか載せなかった期間があった(ので単純にそこから取ると2個以上書いているユーザの日記で取りこぼしが発生した)からなので、現状では挙動変えてもいいかもなと思わないでもないんだけど、初回以外は問題でないだろうしなぁ。
3 再追記: たださんからもらったpatchを適用
たださんがpatchを作って送ってくれたので適用しました。テスト足りてなくてすいません。頂いたメールを引用すると以下のような変更・修正になってます。- rubygems対応 (Mechanaizeをgemで入れてる人向け)
- lastid.logの初期値対応
- HTTP_PROXY対応
- 空のexcludelistとwatchlist対応
4 再追記: 日記トップ画像を1つしかfetchしない問題のfix
T/O。XPath の指定をミスってました。5 再追記: GmailのMultipart取扱い変更への対応とCoderepos.orgへの移動
たださんの修正を受けた最新コードをCodeReposに移動http://svn.coderepos.org/share/lang/ruby/mixi2gmail/