Как стать автором
Обновить

Использование XML-RPC в Drupal. Quickstart

Время на прочтение 3 мин
Количество просмотров 3.7K
В этой статье я расскажу как можно использовать эту замечательную технологию в не менее замечательной системе Друпал. В качестве примера попытаемся сделать систему, позволяющую отправлять сообщения на сайты под управлением Drupal из вашего jabber-клиента.

Чтобы сэкономить время, применим следующие инструменты:
  • Drupal 6
  • Services (модуль для Drupal 6)
  • xmppphp — для создания jabber бота (для тестового приложения вполне сгодится)
  • xmlrpc — упростим себе разработку
  • jid — под которым будет работать бот
  • небольшой вспомогательный класс


Drupal

Устанавливаем Друпал. После установки, включаем модуль Blog. Последующие сообщения будем размещать в блогах пользователей по следующей схеме. Человек добавляет бота себе в ростер, затем отправляет боту сообщение. Бот смотрит: есть ли такой пользователь (с таким же почтовым адресом)? Если есть, то добавляет сообщение от имени этого пользователя. Если таких нет, то регистрирует нового юзера и добавляем от его имени сообщение.
Друпал живёт по адресу drupal.org

Services

Нужно заметить, что на страничке модуля, на момент написания статьи, рекомендован к использованию development snapshot. Его и установим. После установки, включаем всё, что касается сервисов. Модуль имеет различные возможности аутентификации. Оставляю выбор метода на ваш вкус, однако следует учесть, что в примере использовалась авторизация на основе имени и пароля пользователя.
Модуль распологается здесь drupal.org/project/Services

Jabber Bot

C этим пунктом вопросов будет меньше всего, т.к. мы возьмём бота из примера. Берём любого консольного бота (их там аж две штуки) и дописываем несколько строк, которые будут инклудить наш вспомогательный класс.

Проект уютненько расположился на гугле-коде, и найти его можно
по этой ссылке: code.google.com/p/xmpphp
Скачиваем, распаковываем, запускаем бота, используя jid для авторизации.

Start the dance

Друпал готов, сервисы запущены, бот приветливо ждёт новых сообщений. Теперь очередь дошла до программирования. Напишем несколько функций, которые помогут немного упростить задачу.
Создадим небольшой класс и тут нам понадобится библитека xmlrpc:

  1. require_once("xmlrpc/xmlrpc.inc");


В конструкторе класса устанавливаем соединение:
  1. function __construct() {
  2.   $this->send_message('system.connect');
  3. }


И соответственно, неплохо бы прописать отправку сообщений:

  1. function send_message($method, $message = array()) {
  2.    $XMLRPC = new xmlrpc_client(_PATH, _SERV, _PORT);
  3.    $XMLRPC ->return_type = "phpvals";
  4.  
  5.    $msg = new xmlrpcmsg($method, $message);
  6.    $ret = $XMLRPC->send($msg);
  7.  
  8.    if(!$ret->faultCode()) {
  9.      $answer = $ret->value();
  10.      if (isset($answer['sessid']) && !isset(self::$session)) {
  11.        self::$session = $answer['sessid'];
  12.      }
  13.      return $ret->value();
  14.    } else return $ret->faultString();
  15. }


Теперь добавляем ноду. Для этого в качестве параметров передадим имя пользователя и сообщение для отправки:

  1. function node_save($user, $message) {
  2.  $node = array (
  3.   'title' => '*',
  4.   'body' => $message,
  5.   'type' => 'blog',
  6.   'promote' => 1,
  7.   'uid' => 0 ,
  8.   'name' => 'Anonymouse' ,
  9.  );
  10.  $msg = array(
  11.   php_xmlrpc_encode( self::$session ),
  12.   php_xmlrpc_encode( $node )
  13.  );
  14.  return $this->send_message('node.save', $msg);
  15. }


Вот, в общем-то, и всё, что было необходимо сделать. Возможно наблюдательный хаброюзер заметит, что параметр $user ни коим образом не был задействован. Я решил оставить работу с пользователями на совесть читателей. Но если кому-нибудь захочется поскорее прикрутить что-то похожее к своему блогу, то весь класс можно найти здесь: github.com/mcnet/drupal.xmlrpc.class

Удачи!

ЗЫ Я бы не рекомендовал использовать класс без некоторой доработки. В данный момент весь код представлен в качестве ознакомительного примера.
Теги:
Хабы:
+5
Комментарии 6
Комментарии Комментарии 6

Публикации

Истории

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн