Роботи для Google Wave
Вже інвайти Dimi4 я гадаю всім роздав на Google Wave і всім цікаво там полазити, покалацати. Хоча багато будуть напевно розчаровані, бо маркетологи Гугла розказували що це буде “вбивця” майже всього інтернету. Хоча насправді Вейв, то звичайна IRC в вебі з прикольним API.
Раніше вся наша команда активно користувался IRC(крім мене – я в іркі повний нуль), а зараз всю нашу активність по обговоренню проблем перенесли саме до Вейву. Хоча деяких фішок не вистачає, ось наприклад хотілося б щоб пошта повязана з прийомом заявок до складу UASC приходила саме до Вейву. Тож довелося писати свого робота, що не складно. Досить почитати документацію від Гугла, а потім читати “ісходники” вже написаних роботів і тестувати, тестувати і ще раз тестувати. В результаті вийшов робот, що всю отриману пошту спочатку зберігає в базу данних. А потім при кроні від Вейву(який зараз нестабільно працює), а також при збереженню повідомлення – бере з бази всі емайли і постить в Вейві. Також додана перевірка, що якщо хтось додасть бота собі, то він наших емайлів не отримає. Весь код можете глянути тут http://bitbucket.org/presidentua/mail-wave-robot/src/.
Безпосереднь код бота займає лише 40 рядочків:
-
import sys
-
import logging
-
from email_model import EmailModel
-
from waveapi import events
-
from waveapi import model
-
from waveapi import robot
-
-
def addBlip(context, string):
-
context.GetRootWavelet().CreateBlip().GetDocument().SetText(string)
-
-
def OnBlipSubmitted(properties, context):
-
waveid = context.GetRootWavelet().GetWaveId()
-
if waveid != ‘googlewave.com!w+n4VfgKIkA’:
-
logging.info(‘other want our email’)
-
return
-
-
for email in EmailModel.all():
-
t = "Sender: %s\nDate: %s\nSubject: %s\n\n Text: %s" % (
-
email.sender,
-
email.date,
-
email.subject,
-
email.body
-
)
-
addBlip(context, t)
-
email.delete()
-
-
def OnRobotAdded(properties, context):
-
addBlip(context, "I’m alive!")
-
-
if __name__ == ‘__main__’:
-
myRobot = robot.Robot(‘w-mailrobot’,
-
image_url=‘http://w-mailrobot.appspot.com/images/avatar.png’,
-
version=‘7′,
-
profile_url=‘http://w-mailrobot.appspot.com/’)
-
myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)
-
myRobot.RegisterCronJob("/_wave/robot/cron_bot", 60)
-
myRobot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipSubmitted)
-
myRobot.Run()
Надіюсь код буде корисний вам, якщо будете писати власного бота.
Краще б ви розповіли, що таке ций самий гугло-вейв. А то щось не зрозуміло, нащо він.
Хоча вираз “Хоча насправді Вейв, то звичайна IRC в вебі з прикольним API.”, дае досить повний опис сервісу у порівнянні з усіми статтями на хабахабрі))
Розповідати складно про сервіс – краще гляну. Наприклад в коротенькому скрінкасті Фрітоніка – http://vimeo.com/7241928
я тоже довго не міг зрозуміти, але коли побачив то саме так його і охарактеризував для себе, але говорити “звичайна IRC в вебі з прикольним API” бо тут можуть виникнути ще як мінімум 2-х питаннячка )))))))))
Президенту окрема вдячність за пророблену роботу, на даний час це дуже актуально.
дякую.