GoogleAppEngine-pythonを利用して簡単なtwitterbotを作成する
pythonGAEtwitter
基本的にGAEがある程度分かっている人向けに書きます。はい。
GAEのサイトからSDKをとってきて開発環境はできているのを前提に書きます。
とりあえずファイルを置くフォルダを作成しましょう。
twitterbotというフォルダを作ります。場所はどこでもいいですが今回はSDKを落としてきたときに作成したgoogle_appengineフォルダ直下に作成しました。
作成するファイルは
です。
OAuth認証をしないとかっこ悪いのでtweepyというライブラリを使用します。easy_installが入っているなら
easy_install tweepy
で簡単にインストールできます。
下記のkeyとsecretはhttp://twitter.com/oauthを設定して、取得しておきます。そして、
対話型で
import tweepy key = "hogehogehoge" secret = "hogehogehoeg" auth = tweepy.OAuthHandler(key,secret) redirect_url = auth.get_authorization_url() redirect_url
表示されたURLにアクセスして7桁の数字を取得
auth.get_access_token(7桁の数字)
token_key = auth.access_token.key
token_secret = auth.access_token.secret
このtoken_key,token_secretをメモしておきましょう。keyとsecretも使います。
GAEでtweepyを利用するためにはtweepyのソースコードもGAE上にあげる必要があります。
http://codecontrol-samples.googlecode.com/file/gae-tweepy.tar.gz
からファイルをダウンロードして解凍するとtweepyフォルダがあるので、それをtwitterbotフォルダ内にコピーします。
これからプログラムを書いていきます。
twitter.py
import tweepy CONSUMER_KEY = 'twitterで取得したkey' CONSUMER_SECRET = '同じくsecret' TOKEN_KEY = '対話型で取得したkey' TOKEN_SECRET = '対話型で取得したsecret' class TwitterAuth(object): def getAuth(self): auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(TOKEN_KEY,TOKEN_SECRET) oauthapi = tweepy.API(auth) return oauthapi def update(self,oauthapi,post): oauthapi.update_status(post.encode('utf-8'))
これはtweepyのインスタンスを作成し、取得するgetAuthメソッドとポストする文字列をutf-8に直してポストするupdateメソッドを定義しています。
from google.appengine.ext import db from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app from twitter import TwitterAuth import cgi import os from google.appengine.ext.webapp import template import random class Post(db.Model): content = db.StringProperty() class Update(webapp.RequestHandler): def get(self): twitter = TwitterAuth() twitterapi = twitter.getAuth() posts_query = Post().all() posts = posts_query.fetch(1000) post = posts[random.randint(0,len(posts)-1)].content self.response.out.write(posts[random.randint(0,len(posts)-1)].content) twitter.update(twitterapi,post) application = webapp.WSGIApplication( [ ('/update', Update)], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
メインとなるpostmodel.pyです。
Postというモデルはポストする発言を保存するモデルです。
Updateクラスが実際にtwitterにポストするクラスです。twitter.pyからtweepyのインスタンスを取得し、postモデルから1000件までデータを取得します。
random.randint(0,len(posts)-1)
により0〜データ数-1
までの整数を取得します。これによりランダムなポストができるようになります。そしてupdateメソッドによりtwitterにポストします。
cron.yaml
cron: - url: /update schedule: every 12 hours
先ほどのUpdateクラスは/update URLに結びついています。よって/updateを叩くとtwitterにポストするようになっています。なのでこのURLを12時間ごとに叩くようにcron.yamlで設定してあげます。
このtwitterbotフォルダをGAE上にあげて発言したい内容をセットすると簡単なbotの完成です。