a person powered by ototoy blog

MAL Antenna - recommuni version

RSS

カレンダー

2005/3
212225
27282931  
2005/4
     1
456789
11121315
171819202123

月別アーカイヴ

カテゴリー

Blogを公開している友人

公開所属グループ

2005年04月08日

recommuniにアクセスするperlスクリプト 

えー、今回は音楽ネタではなく、コンピュータネタです。

前回書いた日記「一気にDL」(http://recommuni.jp/home/news.php?C=1946&CN=14189)で、無料DLキャンペーン中のランキングを保存してみたら面白いかな、と書いたところ、若干1名の友人が乗ってくれました。「雑談」グループ(http://recommuni.jp/group/index.php?C=413)でトピックを起こして、時々ランキングを保存しておいてみようか、ということになったんですね。

最初はランキングをブラウザで表示して、表をコピペでエディタに貼ってそれを整形、としてみたのですが、面倒なのでまずは整形するperlスクリプトを書いてみました。書いてはみたものの、これでは定期的に自分がアクセスしてファイルを保存しなくてはなりませんし、あまり頻繁にスナップショットを取ることが出来ません。それで、どうせなら自動化したいなあ、ということで週末にちょっと試してみました。

心当たりはあって、perlにはモジュールと呼ばれる再利用可能なライブラリが沢山あります。きっと何かあるだろうなと思いつつ、まずはrecommuniにアクセスするには必須のcookie利用から調べ始めました。で見つけたのがここ。

Perlモジュール/LWP

http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2fLWP

おお、やっぱりcookieは扱えるのね、と安心して、サンプルを改造してまずはログイン可能なことを確認。

指定のページにアクセスするのはそれほど難しくはありません。POSTする先のURLと、その時渡すパラメータが分かればOKです。これはHTMLソースを見ればすぐ分かります。

でランキングページのHTMLが入手できたら、次は投稿したいフォーマットに整形。こういうのはperlが最も得意とするところです。実はActivePerlの5.8でやっちゃったらどうも日本語正規表現マッチが上手くいかなくて、結構無理矢理片付けてしまいました。

でこれを一時間おきに実行したい、と。UNIX環境ならcronに登録して終わりですが、今回は手抜きでWindowsのタスクを使いました。「60分置きに繰り返す」指定をすると、登録するタスクは一つで済みます。

引っかかったのは、ここで得られたランキング情報をグループのトピックに投稿するところ。POSTする時に何かが悪いのでしょうけれど、行毎の改行が消えてしまうのです。う〜ん、分からん。パケットダンプしてみても、ブラウザからは普通にCR+LFを付けているだけに見えるし・・・。

とりあえず、投稿用データは手元に残るのでまあいいか・・・、と一度は投げ出したのですが、毎日まとめて投稿するのも面倒だし、それに何より自分がさぼるとランキング情報を公開できないというのがイヤだなあ、と。

でちょっと方式を切り替えて、IEをperlから制御して、IE経由で投稿させてみることにしました。で検索して見つけたのがこれ。

Win32-IE-Mechanize

http://search.cpan.org/~abeltje/Win32-IE-Mechanize-0.008/lib/Win32/IE/Mechanize.pm

Win32::OLE経由でいじるよりちょっとラクが出来ます。というか、やりたいのはフォームを通しての投稿なので、「ここのテキストボックスにデータを入れて、投稿ボタンを押す」ということをしたいのですから、IEで表示したウェブページ内の要素が指定できる必要がありました。IE-Mechanizeを使うとこのあたりがラクに出来ます。

あとはネットワークが重いときなどにデータ取得や投稿に失敗することがあるので、そのあたりの調整を・・・ある程度してあきらめました。

この程度のことでも、

・定刻になったら、レコミュニの任意のページにアクセスし、表示内容をHTMLとテキストで保存しておく

・得られた情報を、任意の場所に投稿する

という作業を自動化出来ました。まあでもグループの投稿では確認画面が無いのでその分簡単でした。

これが出来るということは、まあその気になれば・・・

・今登録されている楽曲情報を全て手元のデータベースに取り込む

・ついでにその時、レコメンドも全部データベースに取り込む

・新しく配信された曲を全て自動的にダウンロードする

・あらかじめ書きためておいたレコメンドを、指定時刻になったら投稿する

なんてことも・・・きっと出来るでしょう。

やって役立つかは別として・・・(笑)。

いや、でも実際こんなものは存在するのですよ。

Perlモジュール/WWW::Mixi

http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FWWW%3A%3AMixi

mixiにアクセスすることに特化したperlモジュール。

まあこういう第三者ライブラリが出来てくるあたりが人気の証拠でしょうね。これを使えば、あちこち巡回して情報を集めてくることも出来るでしょう。昔パソコン通信の時代に、メール送受信からフォーラム巡回をするマクロをみんなで書いてたようなことがきっとできるでしょう。

う〜ん、レコミュニだったら、どんな使い方をすると楽しく遊べるでしょうか?

| Posted By MAL 投稿日: 2005年4月8日 2時15分 更新日: 2005年4月8日 2時16分

コメント

お疲れ様です。
ランキング4位以下ぐらいが上下していて面白いですね。
ちょっとこの2〜3日私的な用事があり雑談できなくてごめんなさい。

windowsスクリプトを組まれている方がいらっしゃいますよ
http://recommuni.jp/home/news.php?C=13
by いけ - 2005年4月8日 2時53分
おおー。
おもしろい!
やはりperlはいいですねえ。
というかテクニカルな観点からのレコミュニ活用って概念が無かったです。
by ドラ - 2005年4月9日 4時7分
name:
comment:
【コメントに関する注意事項】
記事と全く関連性のないコメント(例:宣伝目的のコメントスパムなど)は、オーナーの判断により削除される場合があります。 - レコミュニ会員としてコメントする

トラックバック