2013年8月3日土曜日

Python + Google App Engine で Twitter から呟く

リマインダーや Tips を呟く自分専用の BOT を作ろうと思ってやってみました。
python-twitter を使います。
ライブラリの設定などで躓いたところをメモしておきます。

ライブラリの設定


python-twitter は simplejson, oath2, httplib2 が必要なので、これらのライブラリを Google App Engine(GAE) 上のプロジェクトで実行できるようにします。ライブラリのコードをプロジェクトに入れることで解決しました。

  • プロジェクトのルートディレクトリに python-twitter ライブラリの build/lib から持ってきた tiwtter.py を置きます。
  • oath2 ライブラリの build/lib 以下にある oath2 ディレクトリをルートディレクトリに置きます。
  • httplib2 ライブラリの build/lib 以下にある httplib2 ディレクトリを oath2 ディレクトリの下に置きます。
  • simplejson ライブラリの build/lib 以下にある simplejson ディレクトリをルートディレクトリに置きます。

最終的なディレクトリ構成は以下のとおりになりました。
│  app.yaml
│  cron.yaml
│  favicon.ico
│  index.yaml
│  main.py
│  twitter.py
│
├─oauth2
│  │  _version.py
│  │  _version.pyc
│  │  __init__.py
│  │  __init__.pyc
│  │
│  ├─clients
│  │      imap.py
│  │      smtp.py
│  │      __init__.py
│  │
│  └─httplib2
│          cacerts.txt
│          iri2uri.py
│          iri2uri.pyc
│          socks.py
│          socks.pyc
│          __init__.py
│          __init__.pyc
│
└─simplejson
    │  compat.py
    │  decoder.py
    │  encoder.py
    │  ordered_dict.py
    │  scanner.py
    │  tool.py
    │  _speedups.c
    │  __init__.py

python は __init__.py があるフォルダをライブラリのフォルダとして認識するので、これで twitter.api からは oath2 と simplejson が見えるようになり、oath2 からは httplib2 が見える…という寸法です。

twitter.Api のキャッシュの無効化


Google App EngineでTwitter(OAuth対応)を使うためのメモ

参考サイトから引用すると
Google App Engineでは、スタティックなファイルを作成等はできない。python-twitterはキャッシュとして、ファイルを作るために、そのままでは動作しない。APIオブジェクトを作成する際にcache=Noneをキーワードとしてつけておくこと。
です。なので、twitter.Api オブジェクトを作成するときは
api = twitter.Api(consumerKey, consumerSecret, accessToken, accessSecret, cache=None)
のようにして cache を無効化してオブジェクトを作成します。

アカウントの登録


BOT 用のアカウントを登録します。
PythonでTwitter BOTを作る を参考にしました。

ソースコード


GAE の URL にアクセスしたときに呟きます。これを cron の JOB に登録すれば、一定時間毎に呟く事が可能になります。
cron.yaml は以下の様な感じ。頻度は適当に。
cron:
- description: job
  url: /
  schedule: every 2 hours
あとは呟く内容を変える仕組みを作れば、自分専用の BOT としては形になりそうです。

0 件のコメント:

コメントを投稿