このサイトについて

microneを使ったらApp EngineのTwitter botが14行で書けた

microneを使ったらApp EngineのTwitter botが14行で書けた

前回紹介した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用アプリケーションに仕上げる。

  1. Twitterのアプリを登録,consumer keyやaccess tokenを取得するTwitter側での準備をしておく
  2. こちらの手順で環境を構築する
  3. app/application.pyに上記コードをペーストする,その際Twitterアプリのconsumer keyなどをコードに埋め込む
  4. app/以下にtweets.txtファイルを作り,つぶやかせたい言葉を一行ごとに書く
  5. 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 :-).

2011-03-24 00:03