Google App Engine + Python で Twitter Bot を作成しました。

以前にTwitterにはBotがたくさんいるよーって聞いてから、自分も何か作ってみたくて、PythonからTwitterに投稿する方法だとか色々調べたり試したりをして、これなら簡単にできそうだなぁという感触は掴めていたのですけど、どんな内容を投稿をするBotにしようかということが思いつかず、しばらく放置していました。

今回ちょっと思いついたので、実装してみました。
B'zの曲をランダムに選択し、その曲から1フレーズをつぶやきます。

歌詞は

★B'zのすべての歌詞をコンプするまとめサイト - トップページ
http://www5.atwiki.jp/bz-words/

様より引用させていただいています。

各方面から怒られそうなBotな上に、正直、実用性は皆無です…。

うーん、実用性はないですが、このBotをフォローしている人は間違いなくB'zの曲を聴くってことがわかるので、同じ趣味の人を見つけやすかったり、繋がりがてきるってくらいの価値はあるかもしれません。

現在フォローしている人は私一人とさびしい状況なので、B'zを聴くぜ!って方はどうぞフォローしてやってください。

B'z Bot (@bz_bot) | Twitter



PythonからTwitterに投稿するコードは以下のような感じです。

def postTwitter(mes):
    pm = urllib2.HTTPPasswordMgrWithDefaultRealm()
    pm.add_password(None,'twitter.com','id','password')
    urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)))
    mes = mes.encode('utf-8')
    urllib2.urlopen('http://twitter.com/statuses/update.xml',urllib.urlencode({'status':mes}))

取得したコードをUTF-8に変換して処理を行っていたので、

mes.encode('utf-8')

このコードはいらないと思ったのですが、これがないと urllib.urlencode がエラーを投げてしまいます。


TwitterBotであるからには、やっぱり自動的に実行させるようにしたいですよね。

ところが、無料で借りられるサーバなんかでは、定期的に動作させる(cron)って処理を行えるところがほとんどないので、今までだとBotを作っても自分で動作させなくてはいけないとかっていう、ちょっと残念な状況がありました。

しかし、そんな残念な状況もGoogle先生のおかげで解決です。
Google App Engineを利用すれば簡単に自動実行ができちゃいます。

cron:
- description: TwitterBot
  url: /
  schedule: every 2 hours
  timezone: Asia/Tokyo

上記のようなコードをcron.ymlで保存し、フォルダに突っ込んでおけば、それだけで定期的に(この場合は2時間ごとに)動作させることが出来ます。

Google App Engineって無料で使えるのに、膨大なリソースを利用できたり、素晴らしすぎますね。
個人でもお金を掛けずに、かなり大規模なWebアプリケーションが作れるんじゃないかって可能性をすごく感じます。