にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

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()

元記事とあまり変わっていませんが、手順は以下のとおり。

  1. Downloads - Google App Engine ― Google Developersから、Google App Engine SDK for Pythonをダウンロードして設定しておく。
  2. プロジェクトのひな型をダウンロードして展開しておきます。(gigq/flasktodo
  3. PythonTwitterライブラリTweepyをダウンロードして、中のtweepyというフォルダをflasktodoフォルダにコピーします。
  4. 2で作ったフォルダのapplication.pyを上記コードに入れ替えます。
  5. My applications | Twitter Developersで、アプリケーションを登録して、Consumer Key〜Access Token Secretを取得し、コード中の値を入れ替えます。
  6. (元記事と同じ)application.pyと同じ階層に「messages.txt」というファイルを作ります。UTF8でBotにつぶやかせたい文字列を改行区切りで書いておきます。
  7. (元記事と同じ)app.yamlの1行目「application: XXXX」の「XXXX」を,1で作ったアプリケーションIDに書き換え,最後の「login: required」を削除します。

ローカルでのテスト方法などは割愛します。コードの中で、発言文字列にランダム数値をくっつけているのは、同じ文字列を連投しようとするとエラーが出てくるのでそれを避けるためです。
あと、余談。App Engineの開発環境外でTweepyを使ったスクリプトを"python2.5で"実行したら「JSONライブラリが見つからない」エラーが出る場合がありますが、App Engine環境ではdjango.util.simplejsonからインポートしてくれるようになっているのできちんとTweepyは動作します。