Гугл Wave - шаленний вбивця

7 Листопада 2009

Я низько кланяюсь Гугловським маркетологам. Це ж нада було звичайну річ так круто пропіарить. Так голосно кричати про Google Wave. Саме цю "чудову" штуку вони охрестили вбивцею почти, чатів, форумів і всього-всього іншого - я навіть дивуюсь, чому не сказали що Вейв вб'є весь інтернет. Хоча якщо подивитись детальніше, то вони зробили аналог IRC, що працює в Вебі і має прикольний API - ото й все. Немає в ньому нічого нового, нічого революційного. Хоча це не значить, що Вейв поганий... Він прикольний - якщо його правильно використовувати. І про саме правильно використання поговоримо...

Нашій групі Ukrainian Security Community(UASC) постійно доводиться обговорювати різні цікаві штучки, і спочатку для таких конференцій використовували IRC, потім Скайп, а зараз зупинилися саме на Вейві. Бо для обговорень в малому колі людей - Вейв поки що кращий. Раніше в нас кожного тижня був черговий, що приймав всю почтову кореспондецію і вирішував всі питання з нею пов'язані. Але зараз це в минулому - з Вейвом за декілька годин був накиданий робот, що приймає пошту і публікує її на Вейві, де вже ми разом можемо її обговорити. Це набагато класніше.

Логіка роботи Робота наступна: Якщо нашого робота додано на якусь хвилю - то він пише одне повідомлення, чим інформує про свою працездатність.
Бот приймає всю почту, що приходить на його адресу і цю почту зберігає в память - в базу данних.
Якщо хтось опублікував якийсь бліп на хвилю, то бот перевіряє, чи є в памяті почтові листи - якщо є - то їх з бази видаляє і одночасно публікує на хвилі.
Також кожну хвилину, бот перевіряє чи є нові листи в базі данних, і якщо є то публікує їх, а з бази видаляє(хоча на практиці cron якось поганенько в вейві працює).
Тож ми тепер всю кореспонденцію що потрібна для всіх пересилаємо(включаємо переадресацію в Гмейлі) на нашого бота, а він вже її публікує.

Сама реалізація - дуже простенька. Потрібно лише на Google App Engine створити аплікацію з такими налаштуваннями:
Файл: app.yaml application: super-mail-robot version: 4 runtime: python api_version: 1 inbound_services: - mail handlers: - url: /images static_dir: images - url: / static_files: index.html upload: index.html mime_type: text/html - url: /_wave/robot/cron_bot script: cron_bot.py - url: /_wave/.* script: mailbot.py - url: /assets static_dir: assets - url: /_ah/mail/.+ script: handle_incoming_email.py login: admin В якому як бачимо ми створюємо перехватчики для Вейва, і для вхідної почти.

Далі, пишемо простого бота: Файл: mailbot.py import sys 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): for email in EmailModel.all(): t = "Sender: %s\n Date: %s\n\n Text: %s" % ( email.sender, email.date, email.body ) addBlip(context, t) email.delete() def OnRobotAdded(properties, context): addBlip(context, "I'm alive!") if __name__ == '__main__': myRobot = robot.Robot('super-mail-robot', image_url='http://super-mail-robot.appspot.com/images/avatar.png', version='7', profile_url='http://super-mail-robot.appspot.com/') myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded) myRobot.RegisterCronJob("/_wave/robot/cron_bot", 60) myRobot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipSubmitted) myRobot.Run() Перехватчик, що буде отримувати емайл - ще простіший: Файл: handle_incoming_email.py import sys from google.appengine.api import mail from email_model import EmailModel message = mail.InboundEmailMessage(sys.stdin.read()) EmailModel( sender = message.sender, date = str(message.date), body = str(list(message.bodies('text/plain'))[0][1]) ).put() Повний код бота трішки нижче. Хоча на практиці використовувати не раджу без доробки - бо багів багато ;). Але як для прикладу розробки напевно підійде.

 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com