以下を参考にしつつ、何かやってみる。
第2回 ロボットAPI:最速!Google Wave API解説|gihyo.jp … 技術評論社
誰も知らない夜のwaveのrobot - When it’s ready.
ライブラリの入手
Python版はこちら。
Google Code Archive - Long-term storage for Google Code Project Hosting.
$ mkdir svn $ svn checkout http://wave-robot-python-client.googlecode.com/svn/trunk/ wave-robot-python-client-read-only
Java版は無いと思ってたけど、ちゃんとあるのね。知らなかったw
Google App Engineのアプリケーションの作成
普通のGAEアプリケーションを作るときと同じように作る。
app.yamlは以下のようにwaveから叩かれるURLに対応するようにする。
application: sugi1982 version: wave-robot runtime: python api_version: 1 handlers: - url: /_wave/.* script: robot.py
Robotのコードを書く
Wave APIについての情報はこちらから。
http://code.google.com/intl/ja/apis/wave/
API Documentもちゃんとある。
http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/index.html
とりあえず書いてみた。
#/usr/bin/env python from waveapi import events from waveapi import robot def blipSubmitted(properties, context): root_wavelet = context.GetRootWavelet() root_wavelet.CreateBlip().GetDocument().SetText('hoge') if __name__ == '__main__': sugyan_robot = robot.Robot('sugyan_robot', 1.0) sugyan_robot.RegisterHandler(events.BLIP_SUBMITTED, blipSubmitted) sugyan_robot.Run()
ドキュメントにはrobot.Robotのコンストラクタにはnameだけ指定すれば良い的なことが書いてあるんだけど、
http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/waveapi.robot_abstract.Robot-class.html#__init__
最新のライブラリのコードをみると、versionの指定もしないとダメらしい。
Google Code Archive - Long-term storage for Google Code Project Hosting.
そもそもどこに使われるパラメータなのかもよく分からないけど。
とりあえずevent.BLIP_SUBMITTEDだけ受け取ってblipSubmittedで処理するよう登録し、blipSubmitted()内では新規にBlipを作成して'hoge'と呟くだけにした。
試しにローカル実行してみる
$ python robot.py Traceback (most recent call last): File "robot.py", line 3, in <module> from waveapi import events ImportError: No module named waveapi
当然怒られます。シンボリックリンクでチェックアウトしてきたライブラリをもってくる。
$ ln -s ~/svn/wave-robot-python-client-read-only/src/waveapi $ ls app.yaml robot.py waveapi
これでどうだ。
$ python robot.py Traceback (most recent call last): File "robot.py", line 4, in <module> from waveapi import robot File "/Users/sugyan/svn/wave-robot-python-client-read-only/src/waveapi/robot.py", line 25, in <module> from google.appengine.ext import webapp ImportError: No module named google.appengine.ext
そうか、waveapiでは内部でGoogle App Engineのコードを呼んでるのか。
$ PYTHONPATH=/usr/local/google_appengine python robot.py Traceback (most recent call last): File "robot.py", line 4, in <module> from waveapi import robot File "/Users/sugyan/svn/wave-robot-python-client-read-only/src/waveapi/robot.py", line 25, in <module> from google.appengine.ext import webapp File "/Users/sugyan/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 68, in <module> import webob ImportError: No module named webob $ PYTHONPATH=/usr/local/google_appengine:/usr/local/google_appengine/lib/webob python robot.py Status: 404 Not Found Content-Type: text/html; charset=utf-8 Cache-Control: no-cache Content-Length: 0
お。とりあえずエラーなく実行は成功したっぽい。大丈夫そうだ。デプロイする。
$ appcfg.py update .
デプロイしないと動作確認できないみたいなので、ローカルでデバッグできるのはここが限界なのかな…
動作確認
Google Wave Sandboxにログイン、デプロイしたアプリケーションIDを使って"******@appspot.com"をContactsに追加、New Waveを開始する。
何か書いて「Done」を押すたびに'hoge'と新規に呟いてくるだけのウザいRobotが完成!