前回紹介したApp Engine用のフレームワークahaをマイクロフレームワーク化するプラグインmicroneを使って,TwittreのBotを書いてみた。
どのくらいで書けるかな,と思って試してみたら,14行で書けた。Flaskで書いたのより一行短くなった。 でもホントはエンコーディング指定と関数の前に空行が欲しいので16行ですゴメンナサイ。
Bot書いてた時間は5分くらいかな? まったく直すことなく,書いたらそのまま動いた。
コードは以下。
from random import choice
from plugin.microne.app import Microne
from plugin.twitteroauth.twitter_auth import TwitterOAuth
app = Microne(__file__)
app.config.consumer_key = 'YOUT CONSUMER KEY'
app.config.consumer_secret = 'YOUR CONSUMER SECRET'
TOKEN = 'YOUR ACCESS TOKEN'
SECRET = 'YOUR ACCESS SECRET'
@app.route('/post')
def post():
status = choice(list(open('tweets.txt')))
ao = TwitterOAuth()
ao.twitter_request('/statuses/update', post_args = {'status': status},
access_token = {'key': TOKEN, 'secret': SECRET }, callback = lambda x:x)
Python的には,11行目の「choice(list(open('tweets.txt')))」がミソ。この部分は長く書くと次のように4行くらいになってしまう。
lines = []
for l in open('tweets.txt'):
lines.append(l)
status = choice(lines)
open('foo.txt')はファイルオブジェクトと してと同時に,ファイルを一行ごと読んで返すイテレータとしても振る舞うので,list()でリストに変換すると,一行ごとのリストを得られる。リストの 要素をrandom.choice()で一つ選んで,Tweetをランダムに選択している。
以下の手順でApp Engine用アプリケーションに仕上げる。
- Twitterのアプリを登録,consumer keyやaccess tokenを取得するTwitter側での準備をしておく
- こちらの手順で環境を構築する
- app/application.pyに上記コードをペーストする,その際Twitterアプリのconsumer keyなどをコードに埋め込む
- app/以下にtweets.txtファイルを作り,つぶやかせたい言葉を一行ごとに書く
- bin/dev_appserver app したあと,http://localhost:8080/post にアクセス,するとアカウントにつぶやく
ローカルのアプリが動くことが分かったら,アプリをデプロイすればクラウド上で動くようになる。事前に,app.yamlの1行目「application: XXXX」の「XXXX」を,1で作ったアプリケーションIDに書き換えておく。
デプロイ後,ブラウザで「http://アプリケーションID.appspot.com/post_update」を開いてみて,つぶやきが流れたら成功:-)。
定期的にBotにつぶやかせたいときには,次のような「cron.yaml」ファイルを作る。
cron:
- description: post update to twitter
url: /post
schedule: every 1 minutes
マイクロフレームワークは,BotのようにWebへの出力がない/少ないサービスを開発するのに向いているね〜。
Enjoy :-).