とにかく無価値な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
もしかしたらこれがないと上手く動作しないかも・・・
ちなみに、今回自分の構成は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.)を準備してください。
以上で終わり。
ね、簡単でしょ。