четверг, 18 февраля 2010 г.

ECF: Пишем ICQ-бота с использованием Habra API


В статье Немного подробнее о проекте CaffeineIM и ICQLib я уже писал, что занимаюсь разработкой провайдера для Eclipse Communication Framework, реализующего работу с OSCAR/ICQ протоколом. Сейчас реализованы все основные API, в частности, ChatManager - часть Presence API, которая позволяет обмениваться сообщениями.

Реализация провайдера содержится в бандле org.eclipse.ecf.provider.oscar, код которого расположен в CVS-репозитории pserver://ecf1.osuosl.org/ecf (каталог plugins/org.eclipse.ecf.provider.oscar).

В качестве примера напишем ICQ-бота, который будет сообщать информацию о карме, хабрасиле и рейтинге пользователя. Так как ECF спроектирован очень грамотно и в нем абстракция (т.е. API) довольно хорошо отделена от реализации (контейнеров), то можно взять код написанного ранее Jabber-бота, реализующего те же функции.


Единственное, что нам придется поменять, так это использование точки расширения org.eclipse.ecf.presence.bot.imRobot. Теперь в ней мы опишем подключение не к Jabber, а к ICQ-аккаунту:

  1. <extension

  2.         point="org.eclipse.ecf.presence.bot.imRobot">

  3.       <imRobot

  4.            connectId="ICQ UIN"

  5.            connectPassword="ICQ PASSWORD"

  6.            containerFactoryName="ecf.oscar.icqlib"

  7.            id="name.samolisov.ecf.bot.habr.habraRobot"

  8.            name="HabraRobot">

  9.       </imRobot>

  10. </extension>



Чтобы запустить бота в эклипс, необходимо в конфигурации запуска заменить бандл org.eclipse.ecf.xmpp на org.eclipse.ecf.oscar. Так же придется добавить бандл org.apache.commons.logging и фрагменты, содержащие его настройки.

UPD: по просьбам читателей раскажу, как запустить бота в консоли.

Нужно сначала создать окружение, описанное в статье. С точностью до версий бандлов оно будет выглядеть так:


\bot
---\configuration
------config.ini
---eclipse.exe
---\plugins
------\org.eclipse.equinox.launcher.win32.win32.x86_1.0.100
---------eclipse.dll
------org.beq.equinox.hello_1.0.0.jar
------org.eclipse.equinox.launcher_1.0.100.jar
------org.eclipse.osgi_3.4.0.jar
------org.eclipse.equinox.common_3.4.0.jar
------org.eclipse.update.configurator_3.2.200.jar


Файл config.ini должен быть примерно следующего содержания (пути и версии опциональны):

osgi.framework=file\:E:/@Pavel/workspaces/bot/plugins/org.eclipse.osgi_3.6.0.v20100128-1430.jar
osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.update.configurator@3:start,org.eclipse.core.runtime_3.6.0.v20091204.jar@start
eclipse.application=org.eclipse.ecf.presence.bot.imRobot
osgi.noShutdown=true
osgi.bundles.defaultStartLevel=4

Далее в каталог plugins помещаем все бандлы, которые описаны в конфигурации запуска. Бандлы из воркспейса предварительно нужно экспортировать в jar-ники с помощью PDE:


org.eclipse.ecf
org.eclipse.ecf.identity
org.eclipse.ecf.datashare
org.eclipse.ecf.discovery
org.eclipse.ecf.ssl
org.eclipse.ecf.provider
org.eclipse.ecf.provider.datashare
org.eclipse.ecf.provider.remoteservice
org.eclipse.ecf.presence
org.eclipse.ecf.remoteservice
org.eclipse.ecf.sharedobject
org.eclipse.core.contenttype
org.eclipse.core.jobs
org.eclipse.core.runtime
org.eclipse.core.runtime.compatibility.registry
org.eclipse.equinox.app
org.eclipse.equinox.common
org.eclipse.equinox.concurrent
org.eclipse.equinox.preferences
org.eclipse.equinox.registry
org.eclipse.osgi
org.eclipse.osgi.services
org.apache.commons.logging
org.apache.log4j
org.eclipse.ecf.presence.bot
org.eclipse.ecf.tests.provider.oscar.log4j_connector
org.eclipse.ecf.tests.provider.oscar.commons_logging_connector
org.eclipse.ecf.provider.oscar
name.samolisov.ecf.bot.habr.icq


Теперь можно запускать приложение из консоли командой eclipse. Если вам нужна консоль для мониторинга, то следует указать ключ -console: eclipse -console.

После запуска можно наблюдать примерно такое окно диалога:



Если вы пишите RCP-приложение и вам нужно взаимодействие с ICQ-протоколом, то OSCAR/ICQ ECF провайдер может оказаться хорошим выбором.

З.Ы. Добавив точку расширения, подключающую MSN-провайдер, можно сделать MSN-бота, а если еще добавить точку расширения, подключающую Skype-провайдер, то и Skype-бота, соответственно.

Скачать примеры к статье (исходники, oscar-провайдер, конфигурацию запуска, rar, 395 Кб)

Понравилось сообщение - подпишитесь на блог или читайте меня в twitter

4 комментария:

Анонимный комментирует...

А как это все можно "собрать" и запустить в консоли? :) можно подробней?

Pavel Samolisov комментирует...

Добавил информацию в статью

Анонимный комментирует...

Недавно вот только начал изучать OSGi технологию. Такое чувство что все создано не чтобы упростить, а чтобы все усложнить :))) хотя может из-за того что еще не привык к модульности и к SOP

Pavel Samolisov комментирует...

На самом деле я бы не сказал, что OSGi сложнее других технологий обеспечения модульности, а вот плюсов в ней очень много, в том числе и пресловутая SOA.

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!