Tworzenie Robotów Google Wave w Pythonie
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:application: NazwaAplikacji
version: 1
runtime: python
api_version: 1
handlers:
- url: /_wave/.*
script: nazwaSkryptu.py
- url: /assets
static_dir: assets
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()
Uzyskiwanie dostępu do Fali
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!")
def OnParticipantsChanged(properties, context):
"""Wywoływany gdy uczestnik fali jest dodawany/usuwany."""
added = properties['participantsAdded']
for p in added:
Notify(context)
Wersje Robotów
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.Publikowanie i testowanie Robotów
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.
Dodawanie Robotów do Fali
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.
Comment article