GAE上でbotが動くようになったので、一旦書き留めておく。
先人の作ったpython-twitterという非常に便利なライブラリがあるので、まずそれをインストールする。
・bot用のフォルダの作成する。
・以下のライブラリをダウンロード・インストール
simplejson(simplejson 3.3.0 : Python Package Index)
httplib2(httplib2 - A comprehensive HTTP client library in Python - Google Project Hosting)
oauth2(simplegeo/python-oauth2 · GitHub)
・python-twitterのダウンロード・インストール (※ 必ず上記のインストールが完了してからインストールを行う)
python-twitter(python-twitter - A python wrapper around the Twitter API - Google Project Hosting)
・以下のファイル・フォルダを、始めに作成したフォルダに入れる
simplejson/ oauth2/ httplib2/ twitter.py
3 OAuth対応
OAuthとは、TwitterAPIをたたく時に必要な認証方法。
現在はOAuth認証しか使えないが、2010年秋頃まではBasic認証というものがあり、それを使うことが多かった。
なので、それ以前に書かれたサイトやブログのやり方では現在うまくいかないことがあるので注意が必要。
・twitter-developers(Twitter Developers)に登録
アカウントはもちろん今回使うbot。
登録すると、Consumer key,Consumer secretが得られる。
・Access Tokenの取得
Settingsタブの、Application TypeのAccessをRead and Writeにする。(重要!)
次に、Detailsタブに戻り、Create my access tokenボタンをクリック。
access tokenのAccess LevelはRead and Writeになっているはず。
もしRead Onlyになっていれば、Recreateする。
これでAccess token,Access token secretも得られ、OAuth認証に必要なものがそろったことになる。
(認証がうまくいくかの確認)
pika_shi_bot.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import twitter CONSUMER_KEY="XXXXXXXXXXXX" CONSUMER_SECRET="XXXXXXXXXXXX" ACCESS_TOKEN="XXXXXXXXXXXX" ACCESS_TOKEN_SECRET="XXXXXXXXXXXX" api = twitter.Api(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token_key=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET, cache=None) postmsg = 'ぴかしなう' status = api.PostUpdate(postmsg.decode("utf-8"))
XXXXXXXXXXXX のとこには、先程取得したConsumer key,Consumer secret,Access token,Access token secretをそれぞれ入れる。
pika_shi_bot.pyを実行。ここまでうまくいってると、botが「ぴかしなう」とつぶやいてくれるはず。
そしてこのファイルは後にbotを動かすためのメインとなるので、フォルダに入れておく。
4 GAEでアプリケーション作成
GAE(GoogleAppEngine)とは、Googleの提供してくれているサーバ環境。
ここにファイルをあげることで、botを自動的に動かせる。
・GAEへ登録(http://code.google.com/intl/ja/appengine/)
SDK for Python(Downloads - Google App Engine — Google Developers)
・bot用のアプリケーションを作成
My ApplicationsのCreate Applicationをクリックすると作成できる。
これでGAEの環境構築は完了。
5 サーバにファイルをあげる。
botを自動的に動かすには、cronというデーモンプロセスが必要。定期的にプログラムを自動実行してもらう。
・以下の2つのファイルを作成
app.yaml
application: XXXXXXXXXXXX version: 1 runtime: python api_version: 1 handlers: - url: /.* script: pika_shi_bot.py login: admin
XXXXXXXXXXXX には、4で作成したアプリケーションのApplicationIDを入れる。
cron.yaml
cron: - description: cron job name url: /.* schedule: every 15 minutes
この場合だと、15分毎に自動実行。
これでファイルをサーバにあげる準備はほぼ完了。
ただし
※ 現在のpika_shi_bot.pyでは、15分毎に「ぴかしなう」とつぶやくが、Twitterでは連続して全く同じツイートを投げるとエラーになるので、ツイートに投稿日時を追加しておく。
改pika_shi_bot.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import twitter import datetime CONSUMER_KEY="XXXXXXXXXXXX" CONSUMER_SECRET="XXXXXXXXXXXX" ACCESS_TOKEN="XXXXXXXXXXXX" ACCESS_TOKEN_SECRET="XXXXXXXXXXXX" api = twitter.Api(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token_key=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET, cache=None) postmsg = 'ぴかしなう[' + datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S") + ']' status = api.PostUpdate(postmsg.decode("utf-8"))
※ python-twitterはそのままではGAEで動かないので修正が必要(重要!)
Issue59(Issue 59 - python-twitter - Won't work on google app engine - A python wrapper around the Twitter API - Google Project Hosting)にあるパッチファイルを参照して変更する。
・動作の確認
以下のコマンドで、現在のフォルダを実行。
dev_appserver.py (フォルダ名)
そして、ブラウザでhttp://localhost:8080/を開く。
何も表示されなかったら成功。
・フォルダをGAEにあげる
GoogleAppEngineLauncherを立ち上げ、File→Add Existing Application Settings→GAEにあげるフォルダを選択→Add
右上のDeploy→ログイン
これでGAEへのアップ完了。
GAEのアプリケーションのページにある、Cron Jobsで、cronが正常に動作しているか確認できる。
botはこんな感じでつぶやいてくれました。
ちなみに時間は標準時なので、朝早くにポストした訳ではないw
これで土台が固まったって感じ。
さあ、botにどんな機能を持たせよう。