Google App EngineのTwitter BotをFlaskとTweepyで作る
PythonのマイクロフレームワークFlaskについて調べていたら以下の記事を見つけました。
練習がてらマネしようと思いましたが、今はTwitterの認証方法がOAuthなので、その形で作り直してみます。
TwitterのライブラリはTweepyを使うことにします。
#coding: utf-8 import random import tweepy from flask import Flask app = Flask(__name__) consumer_key = "your consumer key" consumer_secret = "your consumer secret" my_access_token = "your access token" my_access_token_secret = "your access token secret" @app.route('/post_update') def post_update(): auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(my_access_token, my_access_token_secret) oauth_api = tweepy.API(auth) post=' '.join([random.choice(list(open('messages.txt'))),str(random.random())]) oauth_api.update_status(status=post) return post if __name__ == '__main__': app.run()
元記事とあまり変わっていませんが、手順は以下のとおり。
- Downloads - Google App Engine ― Google Developersから、Google App Engine SDK for Pythonをダウンロードして設定しておく。
- プロジェクトのひな型をダウンロードして展開しておきます。(gigq/flasktodo)
- PythonのTwitterライブラリTweepyをダウンロードして、中のtweepyというフォルダをflasktodoフォルダにコピーします。
- 2で作ったフォルダのapplication.pyを上記コードに入れ替えます。
- My applications | Twitter Developersで、アプリケーションを登録して、Consumer Key〜Access Token Secretを取得し、コード中の値を入れ替えます。
- (元記事と同じ)application.pyと同じ階層に「messages.txt」というファイルを作ります。UTF8でBotにつぶやかせたい文字列を改行区切りで書いておきます。
- (元記事と同じ)app.yamlの1行目「application: XXXX」の「XXXX」を,1で作ったアプリケーションIDに書き換え,最後の「login: required」を削除します。
ローカルでのテスト方法などは割愛します。コードの中で、発言文字列にランダム数値をくっつけているのは、同じ文字列を連投しようとするとエラーが出てくるのでそれを避けるためです。
あと、余談。App Engineの開発環境外でTweepyを使ったスクリプトを"python2.5で"実行したら「JSONライブラリが見つからない」エラーが出る場合がありますが、App Engine環境ではdjango.util.simplejsonからインポートしてくれるようになっているのできちんとTweepyは動作します。