2010/01/07

Twitter Bot を Google App Engine に移した件

とにかく無価値なBotですが、そんな無価値なBotのためにRackspace Cloudのインスタンス代(約1円/時間)を払うのももったいないと言うことでGoogle App EngineへBotを移行させてみました。

もともとUbuntu Server上で動かしていたBotは

  • Pythonで組まれたスクリプト
  • 形態素解析に MeCab
  • 定期実行はCron

という構成でした。

Google App EngineはネイティブにPythonを動作させることの出来る希有なサービスですので移行は非常に単純でした。ほぼコピペ。
このほぼというのがミソで、一部追加しないといけないことがあるそうなので、素直に追加しておきましょう。

ちなみにキモの python-twitter は 0.6 を使用していますが、Api クラスにおいてファイルキャッシュを使っているために、素のままでは GAE で使えません。今回は以下のような Monkey patch を twitter.Api を利用する前に書いて、その場しのぎを…

link: GAE/Python で Twitter bot を作る(準備編) - SPEAKER BREAKA
詳しくはリンク先をご覧ください。関数を一つ定義し直す必要がありますが、コピペで終わるので全然面倒じゃありません。
(コピペで貼ろうとしたら、Macのエディタだとうまくいかない・・・)

 

1番の問題点の形態素解析。
MeCabはLinux等のプラットフォームに最適化されていますし、品詞の切り分けには巨大にしないでも辞書データが必要になります。
Google App Engine上でMeCabを動かすなんて到底無理な話ですので、いつぞや話題になったYahoo日本語形態素解析を思い出したわけです。
Yahoo! 日本語形態素解析APIを Python から使う | itFun.jp

さらに、Ubuntuでは苦労して書いたCrontabも、Google App Engineなら結構単純。
ただ、スペルミスには注意してくださいね;p
Google App Engine/Python で cron.yaml | itFun.jp

 

ここまでは良いとしても少し疑問に思っていた点として、Python から Twitter へ投稿するこういうので利用するライブラリ達。
解決法としては、一回ローカルにダウンロードでしてそれを一緒にアップロードしてしまうという当たり前のようなこと。
今回はPython-twitterを使うに当たって

  • twitter.py
    twitter.pyc
  • simplejson/
    __init__.py
    __init__.pyc
    _speedups.c
    decoder.py
    decoder.pyc
    encoder.py
    encoder.pyc
    scanner.py
    scanner.pyc
    tool.py
.pycは少なくとも1回は実行すると作られるファイルです。
もしかしたらこれがないと上手く動作しないかも・・・

ちなみに、今回自分の構成はmain.pyに記述して
  • BeautifulSoup.py
    BeautifulSoup.pyc
    app.yaml
    cron.yaml
    index.yaml
    main.py
    simplejson/
    twitter.py
    twitter.pyc
    yomi.py

こうなってます。
今回はYahoo日本語形態素解析のXMLから必要なデータを抜き出さないといけないのでBeautifulSoup(Beautiful Soup: We called him Tortoise because he taught us.)を準備してください。
以上で終わり。
ね、簡単でしょ。