sekibang 1.0

2012年1月3日まで利用していたはてなダイアリーの過去記事です。

PythonとGAEでTwitter Botを作ってみました

Pythonの勉強の一環として、Google App Engine(GAE)を利用したTwitter Botプログラムを作ってみました。第一弾は「山形浩生BOT」。こちらは山形浩生の公式サイトの2〜5個ぐらいのURLにある文章を日本語形態素解析ソフト「MeCab」を利用してわかち書きし、マルコフ連鎖で新しい文章を生成するモノ。定期的にこんな発言をします。

基本的にはできあがるのは無内容な文章だけ。MeCabをGAE内では動かせなかったので、発言はあらかじめ生成した文章からランダムに選んでPostするようにしました。Postする部分と、文章を生成する部分のロジックはほとんどネット上で公開されている部分をコピペで。自分で作ったのは、山形浩生公式サイトを巡回して、URLのリストを作成したり、生成元になる文章を整形してあげるところがメイン。正規表現の勉強にもなりました。


プログラムのアイデアとしてはid:murashitくんのmurashittestの丸パクリです。murashitくんには「参考にするからソース・コードみせてよ」とお願いしたのですが「汚いから無理です!」と拒否られてるんですが、今、自分にもその気持ちが分かる! ソース公開って結構勇気がいって、自分の小説や音楽を人に見せるよりも恥ずかしいかも(ソースはどこが悪いか、とか明白だからですかねえ)。ググッてかき集められるようなソースを公開しても意味はないでしょ、そこは、と自己合理化しておきましょう。この程度のプログラムなら、Pythonを導入するところから初めて一日で実装までいけるかなぁ、という感じ(もちろんこの前提に基本的なアルゴリズムの習得があるわけですが)。GAEもかなり簡単で、親切なドキュメントが用意されてるのでスムーズでした。

で、調子に乗って作った第二弾が「今日の菊地日記(PELISSE)」。こちらは菊地成孔の旧・公式サイト「PELISSE」の日記(速報)ページの過去ログからその日に書かれたURLを吐き出してくれる。これもPOSTをする部分は山形BOTとほとんど同じ。作ったのは、URLのリストを作るプログラムと、本日の日付に該当するURLを抽出するプログラム。抽出とPOSTは違うジョブにしていて、抽出でGAEのデータストアに保存して、POSTではそれを定期的に1件ずつ取り出しながら発言をするようにしてます。流用できる部分がたくさんあったので、楽勝かな〜、と思ったんですが「PELISSE」の文字コードシフトJISだったのとXMLが変な書き方されてたのでちょっと気を使ったり、あとデータストアで日本語を扱うときにまた困ったり(テストではうまくいくのに、本番環境では動かない……とか)。タイムマシンがあったらまず、過去に遡って文字コードを統一させたいと思いました。

自分で作ってこれは結構面白くて。一番古いのが2006年ぐらいかな。過去ログを読んでくと昔のことを結構思い出します。昨日リリースしたんだけど、昨日の内容は訃報ばっかりだった……。