YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

Google Wave Robot 事始め

動機

最近はTwitter Botを作るのも飽きたので、仕事でも使うことになるかもしれないGoogle Wave Robotを触ってみました。Python Hackathon #3で id:a2c さんにざざっと概要や勘所を教えてもらったので、そのメモを書きます。

準備

RobotのPython Clientをダウンロード

Google Codeのプロジェクトから取得。Downloadsにあるzipは多少古かったりするみたいなんでSubversionの最新版をcheck outした。

$ svn co http://wave-robot-python-client.googlecode.com/svn/trunk/ wave-robot-client
$ tree wave-robot-client
wave-robot-client/
|-- LICENSE
|-- NOTICE
|-- pydocs
|   |-- api-objects.txt
|   |-- class-tree.html
...
|-- samples
|   `-- dummy
|       |-- app.yaml
|       `-- dummy.py
`-- src
    `-- waveapi    # これをRobot用のAppEngineプロジェクトにコピー
        |-- __init__.py
        |-- document.py
        ...
        |-- run_unit_tests.py
        |-- simplejson
        |   |-- LICENSE
        |   |-- __init__.py
        ...
AppEngine Spotを用意する

Google Wave Robot (以下Robot)を作る際はAppEngineで1アプリケーションを必要とします。とりあえず適当にアプリを作成します。
f:id:ymotongpoo:20100124095703p:image
今回はとりあえずデモを作ってみるということで、下記のサンプルを使いました。

このサンプルからwave.pyを下記の配置になるようにコピー。

$ tree ymotongpoorobot
ymotongpoorobot/
|-- app.yaml
|-- index.yaml
|-- main.py
|-- wave.py    # Robot本体。サンプルよりコピー
`-- waveapi   # SVNからとってきたものをコピー(上記ディレクトリ構造参照)
    |-- __init__.py
    |-- document.py
    |-- document_test.py
    ...

またapp.yamlの編集。RobotはAppEngineの/_wave/.* を見に行くようなのでその設定をする。

$ cat app.yaml
application: ymotongpoorobot
version: 1
runtime: python
api_version: 1

handlers:
- url: /_wave/.*    # Robot用に追加した。サンプル内のapp.yamlよりコピペ
  script: wave.py

- url: .*
  script: main.py
RobotをWaveに登録する

上記のようにAppEngineにRobotの本体を置いたら、下記のようにRobotをWaveのContactに追加します。

  • @appspot.com

f:id:ymotongpoo:20100124123103p:image
登録するとcontact listに追加するか聞かれるので追加して、それを選択してあげてからNew Waveを選択。
f:id:ymotongpoo:20100124123104p:image
すると、AutoReplyのサンプルなのでRobotが「Waveに追加された」というイベントを受け取って返信してきました。
f:id:ymotongpoo:20100124123105p:image

ここから先は?

APIリファレンスとかサンプルをとりあえず見てみるのが早いと思います。

自分の理解でRobotの実装の中心はイベントハンドラの実装だとおもうので

  • waveapi.events
  • waveapi.document

あたりがよいかと。

Robotを自律させたい

やっぱりRobotなんで勝手に働いてもらいたいなあと思いますよね。で、id:a2cさんから「AppEngineのCronに仕込めるみたいだよ」と教えてもらいました。

この関数に与えるべき引数が若干曖昧ですがトライしてみようと思います!