読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

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に仕込めるみたいだよ」と教えてもらいました。

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