Roboty to aplikacje, które wchodzą w interakcje z Falą poprzez protokół Wave (interfejs HTTP). Obecnie obsługiwane są tylko roboty hostowane na Google App Engine, lecz w przyszłości ma zostać dodana obsługa dowolnej platformy hostowania aplikacji webowych/robotów Fali.
By móc tworzyć roboty napisane w Pythonie potrzebujemy biblioteki
Wave Robot Python Client, którą można pobrać z repozytorium SVN:
svn checkout http://wave-robot-python-client.googlecode.com/svn/trunk/src/waveapi waveapi
Musimy także zarejestrować nową aplikację na Google App Engine poprzez
appengine.google.com (zakładanie aplikacji i podstawy Google App Engine dostępne są w
oddzielnej kategorii Biblioteki Pythona). Mając zarejestrowaną aplikację możemy zająć się za tworzenie kodu robota (aplikacji GAE). Oto szkielet
app.yaml takiej aplikacji:
application: NazwaAplikacji
version: 1
runtime: python
api_version: 1
handlers:
- url: /_wave/.*
script: nazwaSkryptu.py
- url: /assets
static_dir: assets
Gdzie
NazwaAplikacji to nazwa (ID) zarejestrowanej na GAE aplikacji, a
nazwaSkryptu.py to nazwa pliku z kodem aplikacji. Dodatkowo katalog
assets posłuży nam na pliki statyczne.
Mając gotową konfigurację możemy zabrać się za kod robota zawarty w
nazwaSkryptu.py. Oto prosty przykład:
from waveapi import events
from waveapi import model
from waveapi import robot
def OnParticipantsChanged(properties, context):
"""Wywoływany gdy uczestnik fali jest dodawany/usuwany."""
added = properties['participantsAdded']
for p in added:
Notify(context)
def OnRobotAdded(properties, context):
"""Wywoływane gdy robot zostanie dodany do fali."""
root_wavelet = context.GetRootWavelet()
root_wavelet.CreateBlip().GetDocument().SetText("I'm alive!")
def Notify(context):
root_wavelet = context.GetRootWavelet()
root_wavelet.CreateBlip().GetDocument().SetText("Hi everybody!")
if __name__ == '__main__':
myRobot = robot.Robot('NazwaAplikacji',
image_url='http://NazwaAplikacji.appspot.com/icon.png',
version='1',
profile_url='http://NazwaAplikacji.appspot.com/') # obecnie nie używane
myRobot.RegisterHandler(events.WAVELET_PARTICIPANTS_CHANGED, OnParticipantsChanged)
myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)
myRobot.Run()
W powyższym przykładzie importujemy API biblioteki Wave dla Pythona i definiujemy funkcję Main, która definiuje nowego robota o podanej nazwie, rejestruje obsługę zdarzeń dla zdarzeń WAVELET_PARTICIPANTS_CHANGED i WAVELET_SELF_ADDED i uruchamia robota. Funkcje stworzone przed funkcją Main zostaną wykonane przy zaistnieniu tych zdarzeń.
W naszym przykładzie wykorzystujemy zdarzenie
WAVELET_SELF_ADDED, by móc wykryć kiedy robot zostanie dodany do jakiejś Fali i wykonać jakąś czynność, np. napisać wiadomość w Fali. W tym celu stworzyliśmy funkcję
OnRobotAdded:
def OnRobotAdded(properties, context):
"""Wywoływane gdy robot zostanie dodany do fali."""
root_wavelet = context.GetRootWavelet()
root_wavelet.CreateBlip().GetDocument().SetText("I'm alive!")
Wykorzystujemy także zdarzenie
WAVELET_PARTICIPANTS_CHANGED, by wykryć gdy ktoś inny niż robot zostanie dodany do fali. Do obsługi tego zdarzenia mamy funkcję
OnParticipantsChanged:
def OnParticipantsChanged(properties, context):
"""Wywoływany gdy uczestnik fali jest dodawany/usuwany."""
added = properties['participantsAdded']
for p in added:
Notify(context)
Dla każdego dodanego uczestnika Fali wywołujemy funkcję
Notify, która do Fali dodaje blipa z tekstem "Hi everybody!".
Roboty w Wave API są wersjonowane. Pozwala to wykryć systemowi zmiany możliwości, kodu robota. Jeżeli zmieniasz możliwości, funkcjonalności Robota powinieneś także zmienić wersję w jego konstruktorze. Wersja jest zwykłym tekstowym identyfikatorem.
Możesz testować roboty publikując je na App Engine i dodając do Fali. Obecnie nie ma możliwości testowania robotów hostowanych lokalnie, lecz przyszłe wersje SDK będą pozwalały na testowanie lokalnych robotów.
Po opublikowaniu robota na GAE możesz sprawdzić jego dostępność otwierając w przeglądarce http://NazwaAplikacji.appspot.com/_wave/capabilities.xml. Plik capabilities.xml generowany jest automatycznie przez API i zawiera listę zdarzeń wykorzystywanych w robocie.
Obecnie by dodać nowego robota dodaj go do kontaktów. Adres robota to NazwaAplikacji@appspot.com, np: dummyrobot@appspot.com :) Następnie dodaj go jako uczestnika Fali - robot dołączy do niej i wywołana zostanie funkcja "OnRobotAdded".
Na podstawie
Google Wave Robots: Python Tutorial.
- Dodane: 06.10.2009 przez riklaunim