Home > Кодинг > Роботи для Google Wave

Роботи для Google Wave

Вже інвайти Dimi4 я гадаю всім роздав на Google Wave і всім цікаво там полазити, покалацати. Хоча багато будуть напевно розчаровані, бо маркетологи Гугла розказували що це буде “вбивця” майже всього інтернету. Хоча насправді Вейв, то звичайна IRC в вебі з прикольним API.

Раніше вся наша команда активно користувался IRC(крім мене – я в іркі повний нуль), а зараз всю нашу активність по обговоренню проблем перенесли саме до Вейву. Хоча деяких фішок не вистачає, ось наприклад хотілося б щоб пошта повязана з прийомом заявок до складу UASC приходила саме до Вейву. Тож довелося писати свого робота, що не складно. Досить почитати документацію від Гугла, а потім читати “ісходники” вже написаних роботів і тестувати, тестувати і ще раз тестувати. В результаті вийшов робот, що всю отриману пошту спочатку зберігає в базу данних. А потім при кроні від Вейву(який зараз нестабільно працює), а також при збереженню повідомлення – бере з бази всі емайли і постить в Вейві. Також додана перевірка, що якщо хтось додасть бота собі, то він наших емайлів не отримає. Весь код можете глянути тут http://bitbucket.org/presidentua/mail-wave-robot/src/.

Безпосереднь код бота займає лише 40 рядочків:

  1. import sys
  2. import logging
  3. from email_model import EmailModel
  4. from waveapi import events
  5. from waveapi import model
  6. from waveapi import robot
  7.  
  8. def addBlip(context, string):
  9.     context.GetRootWavelet().CreateBlip().GetDocument().SetText(string)
  10.  
  11. def OnBlipSubmitted(properties, context):
  12.     waveid = context.GetRootWavelet().GetWaveId()
  13.     if waveid != ‘googlewave.com!w+n4VfgKIkA’:
  14.         logging.info(‘other want our email’)
  15.         return
  16.  
  17.     for email in EmailModel.all():
  18.         t = "Sender: %s\nDate: %s\nSubject: %s\n\n Text: %s" % (
  19.             email.sender,
  20.             email.date,
  21.             email.subject,
  22.             email.body
  23.         )
  24.         addBlip(context, t)
  25.         email.delete()
  26.  
  27. def OnRobotAdded(properties, context):
  28.     addBlip(context, "I’m alive!")
  29.  
  30. if __name__ == ‘__main__’:
  31.     myRobot = robot.Robot(‘w-mailrobot’,
  32.         image_url=‘http://w-mailrobot.appspot.com/images/avatar.png’,
  33.         version=‘7′,
  34.         profile_url=‘http://w-mailrobot.appspot.com/’)
  35.     myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)
  36.     myRobot.RegisterCronJob("/_wave/robot/cron_bot", 60)
  37.     myRobot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipSubmitted)
  38.     myRobot.Run()

Надіюсь код буде корисний вам, якщо будете писати власного бота.

  1. November 8th, 2009 at 14:22 | #1

    Краще б ви розповіли, що таке ций самий гугло-вейв. А то щось не зрозуміло, нащо він.
    Хоча вираз “Хоча насправді Вейв, то звичайна IRC в вебі з прикольним API.”, дае досить повний опис сервісу у порівнянні з усіми статтями на хабахабрі))

  2. November 8th, 2009 at 15:09 | #2

    Розповідати складно про сервіс – краще гляну. Наприклад в коротенькому скрінкасті Фрітоніка – http://vimeo.com/7241928

  3. November 9th, 2009 at 21:17 | #3

    mr.The :
    Краще б ви розповіли, що таке ций самий гугло-вейв. А то щось не зрозуміло, нащо він.
    Хоча вираз “Хоча насправді Вейв, то звичайна IRC в вебі з прикольним API.”, дае досить повний опис сервісу у порівнянні з усіми статтями на хабахабрі))

    я тоже довго не міг зрозуміти, але коли побачив то саме так його і охарактеризував для себе, але говорити “звичайна IRC в вебі з прикольним API” бо тут можуть виникнути ще як мінімум 2-х питаннячка )))))))))

    Президенту окрема вдячність за пророблену роботу, на даний час це дуже актуально.
    дякую.

  1. No trackbacks yet.