WordPress. Работа с XML-RPC в Delphi. Читаем комментарии.Источник: webdelphi
Продолжим разбираться с XML-RPC и API WordPress. Сегодня попробуем научиться считывать комментарии из постов. В прошлый раз мы остановились а чтении данных о постах, в частности, написали небольшую функцию для чтения заголовков постов и некоторой служебной информации. Эта информация нам пригодится, т.к. будет использоваться в нескольких методах, предоставляемых нам WordPress API. Вообще, в xmlrpc.php есть следующие методы для работы с комментариями:
Вначале рассмотрим входные параметры метода.
Как видите, сегодня дополнительно научимся формировать запрос содержащий структуру (struct). На выходе мы получим, как и в случае с чтением заголовков постов, массив структур, где каждая структура будет содержать следующие значения:
Информации по комментарию выдается более, чем достаточно для работы. Так как метод содержит ряд необязательных параметров, то вначале попробуем действовать "в лоб", используя только обязательные параметры и посмотрим, что вернет нам метод. Формируем запрос:
Здесь я считываю только заголовки постов (восьмое значение в структуре) для которых оставлен комментарий, используя уже имеющиеся методы для формирования запроса, просто чтобы проверить, что вернется от сервера. В итоге получаем 10 значений, например, применительно к моему блогу это может быть:
Продолжаем разбираться. У метода есть необязательный параметр filter. Попробуем использовать его. Добавляем в функцию всего одну строку
Выполняем функцию и на выходе получаем список с заголовками постов для всех комментариев блога. Даже при такой малой части информации, получаемой из XML-документа (мы читаем только заголовки) у меня получился файл размером 23,5 Кб (всего на момент написания поста было 433 комментария). Теперь представьте сколько информации прокачивается по Сети вообще при таком запросе? Для моего случая получилось около 1 Мб за раз. Много, не экономично и может очень сильно "подвесить" программу. Поэтому в зависимости от ситуации будем получать либо последние 10 комментариев в блоге, либо использовать в запросе дополнительную структуру. Как раз сейчас и научимся записывать структуры. Как Вы помните, структура, в отличие от массива содержит тег member и каждый member содержит название поля ( name ) и значение ( value ). Чтобы заполнить структуру данными можно, например, использовать вариантный массив в Delphi . Или использовать заранее определенный тип данных, который будет использоваться в работе с конкретным видом запросов к серверу. Вариантные массивы - это отдельная и довольно интересная тема (может рассмотрим её позднее), а сегодня просто учимся работе с XML-RPC в Delphi и используем второй вариант. Заводим новый тип данных для структуры в запросе wp.getComments:
Теперь пишем метод для добавления структуры в документ:
Пишу и представляю себе негодование программистов, читающих пост и восклицания типа: "Что за с..нь?!", "Кто так делает??" и т.д. Поэтому сразу прошу у Вас прощения и в оправдание говорю следующее:
Вроде бы все Итак, продолжаем дальше. Дописываем GetComments, например так:
В результате получимтело запроса со следующим содержимым: <?xml version="1.0"?> <methodCall> <methodName>wp.getComments</methodName> <params> <param> <value><int>1</int></value> </param> <param> <value><string>admin</string></value> </param> <param> <value><string>vlad383</string></value> </param> <param> <struct> <member> <name>post_id</name> <value><int>2068</int></value> </member> <member> <name>status</name> <value><string>approve</string></value> </member> <member> <name>offset</name> <value><int>0</int></value> </member> <member> <name>number</name> <value><int>100</int></value> </member> </struct> </param> </params> </methodCall> В результате для поста с id=2068 мы получим первые 100 или, если комментариев меньше, то все посты, которые были одобрены и опубликованы в блоге. Аналогичным образом получаются данные по комментариям с отметкой "спам" или "на модерации". Другие методы для работы с комментариями, я полагаю, рассматривать не стоит,т.к. в них используются те же простые запросы и данные только в другом порядке и повторять одно и тоже как-то нет желания. Так что пока можете поучиться работать с методом GetComments, а я тем временем накидаю метод для добавления структуры в запрос. |