appengine pythonで数時間でtwitterのbotを作る
一日につぶやいた数を毎日23:55に自動でつぶやくbot, nekofierをappengine上で作りました。
以下、その時のメモです。簡単な仕組みなのでbotを作成する際の参考になれば。
nekofierってなに?
一日につぶやいた数を毎日23:55に自動でつぶやきます。この時、つぶやきにweb上のどこかにあるネコ画像へのリンクも一緒につぶやきます。
こんな感じです↓
ソースはgithubに置いてあります。
https://github.com/yatt/nekofier
構成
こんな感じの構成です。
- 毎日23:50に画像更新
- 毎日23:55に、その日つぶやいた回数と画像リンクをつぶやく
作るのに要求される知識
取得・発行が必要なデータ
以下、具体的な実現方法。
- 作者: Dan Sanderson,玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/01/24
- メディア: 大型本
- 購入: 5人 クリック: 414回
- この商品を含むブログ (27件) を見る
猫画像をどこから持ってくるか?
nekostagramという、instagramと連携するwebアプリをクロールしてurlを取得するようにします。こんなコードを実行して、猫画像のリンクを取得します。
# coding: utf-8 import urllib import re def get(): # nekostagramからデータを取得 conn = urllib.urlopen('http://nekostagram.heroku.com/') cont = conn.read(4096) # 画像リンクのみ抽出 lst = re.findall(r'(http://dist.+?\.jpg)["\']', cont) return lst[0]
かわいい・・・
twitterの認証処理
twitterは認証にoauthという仕組みを使います。oauthの仕組み自体はtwitterの開発者サイトなどにわかりやすい説明があります。
通常、外部公開するtwitterアプリは、oauthの認証画面に飛ばしてコールバックして処理を継続する・・などという処理をしますが、今回は、自分一人だけが使う事を想定しているので、簡単のため、特にoauth認証のための画面や処理などは用意していません。リモートシェルなどからアクセストークンを直接データストアに保存しています。アクセストークンは https://dev.twitter.com/apps の、アプリ詳細画面から発行、表示させることができます。
twitterのRESTful APIを叩く
RESTful APIを叩くのに、拙作のtwittwer apiライブラリ、twitterlibを用いました。
定期実行をどうやるか?
appengineは、定期で特定のurlをキックする仕組みを提供しています。この仕組みをつかって毎日の猫画像の更新とつぶやきを実行します。
アップロードするソース群のルートにcron.yamlを配置して特定の記述をする事で対応します。今回は以下のような記述をしました。
cron: - description: tweet it url: /batch/tweet schedule: every day 23:55 timezone: Asia/Tokyo - description: update photo link url: /batch/updatelink schedule: every day 23:50 timezone: Asia/Tokyo
nekofierのソース内では、外部からこれらのリンクにアクセスされないよう保護する設定をしています。