Робот для Google Wave. Напишем его на Python’е!Роман «presidentua» Хоменко, http://tutamc.com «Ладно, я построю свой собственный модуль с блек-джеком и шлюхами. Вообще-то, к черту модуль и блек-джек»... Какие хорошие советы могут давать роботы! Отлично, сегодня я расскажу тебе, как построить своего маленького робота. Например, для новомодного Google Wave. Google Wave получил хороший пиар, и думаю, в этом мире не сыскать того, кто не слышал о нем (не считая соседа Толика, который в запое :)). Нельзя исключить, что пиар даже немножко повредил Волне, позиционируя это явление природы как убийцу почты, форумов, и чуть ли не всего остального интернета. Лично для меня Волна - это достаточно классно сделанный IRC с хорошим API. С помощью которого мы можем создавать гаджеты и, что интереснее, роботов, которые могут расширять возможности Wave под любые нужды. Робот APIРобот для Wave будет представлять собой e-mail с аватаркой, описанием и закрепленными за ним событиями. Событий у нас будет около 15 штук, но для большинства случаев хватит и двух:
Первое событие возникает, когда мы добавляем робота на какую-либо волну. Второе событие проявляется в случае, когда кто-то добавляет сообщение, причем это сообщение возникает в момент нажатия на кнопку «Done». Вообще, в контексте программирования волны Google вводит несколько понятий:
Помнишь в позапрошлом номере я тебе рассказывал о Google App Engine(GAE)? Так вот, на данный момент роботов можно строить лишь с использованием GAE. К практике!Теория в случаях с Гуглом сложнее, чем практика, поэтому не будем на ней задерживаться и перейдем сразу к созданию робота. Все проекты на GAE начинаются с пустой папки и файла app.yaml, в котором мы установим, что все запросы от wave будет обрабатывать скрипт jbot.py: Давай теперь определим ТТХ нашего робота. Пусть он должен уведомлять нас по джабберу о новых сообщениях в Волну. И, соответственно, мы должны иметь возможность подписывать свой джаббер на обновления и удаляться из рассылки. В тексте приходящего сообщения будет содержаться мейл автора и текст новой мессаги. Нам нужно будет перехватывать событие WAVELET_SELF_ADDED для вывода справки о командах и перехватывать BLIP_SUBMITTED с целью рассылки уведомлений.
Создадим объект робота, передав название, адрес аватарки, версию и адрес сайта робота. Заметь, что версию нужно обязательно менять, если изменяется список событий, потому что новые события в этом случае не будут работать.
Теперь добавим перехват нужных событий и сам запуск робота:
В процессе регистрации перехватчиков мы указывали OnRobotAdded, OnBlipSubmitted - это названия функций, которые будут вызываться при активизации события. Они должны принимать два параметра: properties, context. В properties будет содержаться информация относительно конкретного события, а в context - информация об окружении, о волне, где событие возникло. Именно через работу с context мы можем добавить новое сообщение в волну, вызвав такую длинную цепочку функций:
Также из нее можно достать идентификатор волны, который нам позже понадобится:
Затем обработаем событие добавления робота на волну. При получении данного события мы добавим текстовое сообщение в волну с описанием команд, которые наш бот сможет принимать:
Здесь для будущего удобства мы добавили функцию по добавлению сообщений - addBlip. А потом уже отправили само сообщение. ДжабберСейчас нам с тобой придется научиться отсылать из GAE сообщения на джаббер. Для этого активируем соответствующий функционал путем добавления в файл настроек app.yaml нескольких строчек:
Вуаля, теперь мы можем юзать функции для отправки запроса авторизации и самих сообщений:
В процессе программирования под Google Wave иногда не очень понятно, почему что-то не работает. Исходя из этого, нам обязательно нужно использовать модуль logging. В GAE после его импортирования мы можем добавлять сообщения разной степени важности:
Обработчик этих сообщений автоматически добавит информацию о них в базу данных. И мы, зайдя в админку, сможем их просматривать. Был Blip?Для завершения работы осталось сделать последний шаг - написать OnBlipSubmitted - обработчик события о новом сообщении. Функция эта будет способна обрабатывать три ситуации:
Алгоритм ясен? Выразим его скупыми строчками программного кода:
База данныхДля сохранения привязки джаббер-акка к волне нам будет нужна база с двумя полями, одним для идентификатора волны и вторым для джаббера:
Все готово к непосредственной обработке команд и добавлению пользователей в БД:
Как видим, мы не только добавляем юзера в базу данных, но и присылаем запрос авторизации – чтобы остальные сообщения доставлялись без затруднений. Принцип удаления пользователя из рассылки практически аналогичен, а точнее – намного проще. Ознакомься с тремя главными строчками:
Если же никакой команды нет, то достаем из базы всех, кто подписался, и отправляем им сообщение:
Видишь, как просто? Мы так долго готовились к реализации работы с командами, а на деле получилось лишь несколько строчек сухого и безжалостного программного кода. Люди или Бендер?После написания робота я залил его на GAE, и теперь ты можешь добавить wabber-robot@appspot.com к себе в контакты. По идее, нужно еще добавить подтверждения для джабера, чтобы только пользователь мог себя добавить в список. А то ведь получается, что любой джаббер-аккаунт можно будет заспамить…хотя, наверное, это не баг, а фича. В общем, до новых встреч! Ну, Фрай, было приятно познакомиться, пойду, убью себя ©. Еще парочка Wave api-командДопустим, мы получили сообщение:
Добавить текст в какую-то позицию:
Добавить текст в конец сообщения:
Удалить можно командой:
Создать ссылку:
Парочка фактовРабота над проектом Wave началась в 2007 году. Основными разработчиками программного обеспечения были братья Ларс и Йенс Расмуссены, также являющиеся главными разработчиками Google Maps. Google Wave использует технологии, предоставленные возможностями HTML 5. Некоторые функции в настоящее время доступны только после установки Google Gears. Технология Google Wave подразумевает открытость протоколов и программного обеспечения (под лицензией Apache Software License), что позволяет развертывать собственные серверы Google Wave как подключенные и синхронизируемые, так и не подключенные к серверам Google. Во втором случае сообщения между пользователями локальной инсталляции не будут передаваться во внешнюю сеть. INFOХорошо быть первым? Да! Поэтому к моменту запуска Wave в паблик желательно уметь написать к нему крутой спамер или что-то в этом роде :). DVDИсходники бота со всеми либами ждут тебя на диске. VIDEOКак всегда, снял для тебя видео про тестирование своего бота. Надеюсь, заценишь! WWW
|