уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Недавно собрал небольшой сайт с использованием CMS Joomla! и решил посмотреть как этот движок устроен, какие возможности есть. В общем провести небольшую инвентаризацию инструментов и способов управления сайтом. Естетсвенно, т.к. уже остаточно продолжительное время управляюсь с блогом, меня заинтересовал вопрос поддерживает ли Joomla! работы с XML-RPC и, если поддерживает, то на каком уровне и как можно, например, закинуть с помощью XML-RPC на сайт статью или наоборот – удалить что-либо. Собственно, после изучения WordPress понять где что лежит и как работает в Joomla! оказалось довольно не просто. Может настолько уж я привык к простому устройству WordPress, а может и просто старею :), но копаться в движке и искать список методов, поддерживаемых в XML-RPC Joomla! мне стало лень. А лень, как известно, двигатель прогресса.

В начале немного о том, что удалось найти по поводу XML-RPC в Joomla в принципе. Итак, разработка красивых сайтов, а точнее движков (CMS) подразумевает, что такие движки предоставляют максимум возможностей для разработчиков. И, хоть XML-RPC, не самая продвинутая технология, но достаточно популярна и, не знаю как Вам, а мне она кажется очень удобной для использования. Вот и разработчики Joomla! добавили возможность использования XML-RPC в свой движок. Но вот какая незадача — с документацией вышел небольшой напряг. Вроде как есть возможность использовать, есть даже директория для XML-RPC, модули всякие, а как использовать — сильно распространяться не стали. Где-то даже на официальном форуме была жалоба дескать XML-RPC в Joomla! разработан шпионами и для использования шпионами. Но в целом я прекрасно понимаю разработчиков — зачем переписывать одно и то же несколько раз? Есть сервер XML-RPC, который поддерживает работу с несколькими API. Если я не ошибаюсь, то «из коробки» доступен Blogger API. Смысл писать про Blogger API, если есть официальная документация? Есть плагины, которые добавляют, например, использование MetaWeblog.API – по этому API тоже есть официальная документация. Открывай, читай, пиши программы. Другой момент, что некоторые функции API могут не поддерживаться, например, чтение комментариев или создание новых категорий. И здесь, как нельзя кстати, подойдет вызов методов сервера XML-RPC. Чем мы сегодня и займемся.

Определимся с задачей на сегодня. Давайте разработаем приложение в Delphi, которое будет “опрашивать” сервер на предмет поддерживаемых им функций, чтобы затем, если понадобиться, использовать эти методы в своих программах, например при написании блог-клиентов, читалок комментариев и т.д.

Для отправки запросов воспользуемся библиотекой Synapse, а для парсинга XML используем NativeXML. Создадим новый проект Delphi и посмотрим и разместим, для начала, на главной форме приложения всего 3 компонента:

1. TEdit – в него будем записывать URL доступа к XML-RPC

2. TButton – клик по кнопке будет выполнять запрос

3. TMemo – пока будем выводить ответ сервера в Memo, чтобы посмотреть какую информацию вернет нам сервер.

Теперь посмотрим, что может нам “рассказать” о себе сервер. Обычно набор методов зависит от того какую библиотеку использовали разработчики. Например, в Joomla! используется библиотека, которую разработал Edd Dumbill и нам доступны методы:

  • system.listMethods
  • system.methodHelp
  • system.methodSignature
  • system.getCapabilities

В свою очередь в WordPress использовали библиотеку IXR — The Inutio XML-RPC Library, которая выглядит более красиво и изящно, но, в то же время в ней отсутствуют методы

  • system.methodHelp
  • system.methodSignatureСоответственно, Вам может встретится и такая библиотека в которой наоборот может появится дополнительный метод и т.д., но system.listMethods должен быть всегда. Именно им мы и воспользуемся для начала. Итак, точка доступа к XML-RPC в Joomla! выглядит следующим образом:http://you-domain.etc/xmlrpc/index.php

    Сюда мы будем отправлять запрос. В методе system.listMethods не используются никакие параметры, поэтому первый запрос получится довольно короткий и простой. В Delphi код будет выглядеть следующим образом:

    procedure TForm2.Button1Click(Sender: TObject);
    var
      HTTPSender: THTTPSend;
      XMLDoc: TNativeXML;
    begin
      HTTPSender := THTTPSend.Create;
      XMLDoc := TNativeXML.CreateName('methodCall');//создали XML с корневым узлом methodCall
      try
        XMLDoc.Root.NodeNew('methodName').ValueAsString := 'system.listMethods';//добавили название метода
        XMLDoc.SaveToStream(HTTPSender.Document); //записали XML в тело запроса
        if HTTPSender.HTTPMethod('POST', Edit1.Text) then //отправили запрос
          Memo1.Lines.LoadFromStream(HTTPSender.Document);//вывели ответ в Memo1
      finally
        HTTPSender.Free;
        XMLDoc.Free;
      end;
    end;

    Ответом будет массив, содержащий названия всех методов, которые нам доступны. Например, в случае моего сайта на Joomla! (с установленным плагином для поддержки MetaWeblog API) ответ сервера выглядит следующим образом:

    xmlrpc

    Всё, что теперь от нас требуется – получить значения элементов массива. В нашем случае это делается достаточно просто – создаем обработчик события OnNodeLoaded у  XMLDoc, который будет содержать всего две строчки:

    procedure TForm2.XmlNodeEvent(Sender: TObject; Node: TXmlNode);
    begin
      if Node.Name = 'string' then
        Memo1.Lines.Add(Node.ValueAsString)
    end;

    Немного изменяем обработчик OnClick кнопки:

    procedure TForm2.Button1Click(Sender: TObject);
    ...
    if HTTPSender.HTTPMethod('POST', Edit1.Text) then
       begin
         Memo1.Lines.Clear;
         HTTPSender.Document.Position := 0;
         XMLDoc.OnNodeLoaded := XmlNodeEvent;
         XMLDoc.LoadFromStream(HTTPSender.Document);
       end;
    ...

    Теперь при загрузке данных из потока в XMLDoc при каждом обнаружении узла «string» будет срабатывать обработчик события и выводить в Memo1 название метода. Ну, а зная названия методов мы можем без проблем найти всю необходимую документацию и создать необходимое нам приложение. Сегодня мы рассмотрели всего один из доступных нам методов и получили список доступных для работы методов XML-RPC в следующий раз научимся получать справочную информацию по каждому методу.

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
2 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Yuri
Yuri
28/10/2010 18:45

Спасибо. Хороший пост