Публикация блога на Drupal с телефона на WP8.1

Понадобилось прикрутить возможность вести блог на сайте через телефон Lumia с WP8.1. Быстрый обзор выдал три приложения: Writer, Blog Client и платная BloghuB. Кратко говоря, я смог заставить работать только первую и последнюю, да и то, у Writer интерфейст более глючный, и в конце концов, программа перестала работать с сайтом. BloghuB оказалась единственным приложением, которое хорошо работает и легко прикручивается к Drupal.

Теперь о минусах BloghuB - стоит 3.99$, но основная проблема в том, что найти и установить программу можно только, если на телефоне выставлен регион США или Австралия. В России программу поставить не получится. Ссылка на программу тут. У программы есть демо-режим на 9 дней, и по-моему при переустановке приложения счетчик обнуляется. Как поменять регион телефона можно глянуть тут.

Установить приложение это пол-беды. Надо еще заставить работать Drupal. Для этого будем использовать технологию MetaWeblog API, теоретически совместимую с кучей приложений для ведения блогов.

Предположим, что Drupal уже установлен. Далее надо поставить модули: Blog API, Services, Chaos tool suite (ctools).

Не забываем, что надо включить следующие модули:

После установки заходим в admin/config/services/blogapi и выставляем галочки:

Далее идем в admin/structure/services/list/blogapi_xmlrpc/resources и выставляем галочки для тех операций, которые мы разрешаем делать клиентскому приложению:

Затем идем admin/people/permissions и выставляем права на пользователей для работы с Blog API:

В моем случае я разрешил работать с сайтом только администраторам сайта.

Также надо указать в admin/config/content/formats порядок использования форматов текста, т.к. если указать первым форматом фильтрованный HTML, то наши блог записи будут публиковаться без картинок.

Потом в admin/structure/types/manage/blog/fields надо проверить что формат выбран Full HTML:

Далее начинается самое сложное. Надо пропатчить файл xmlrpc.inc в папке includes. Дело в том, что клиенты телефона WP8.1 при обращении к сайту добавляют три спецсимвола перед данными, показывающими формат UTF-8 BOM. Надо эти символы удалить. Для этого подходит команда типа: $str = str_replace("\xEF\xBB\xBF",'',$str);

Если этого не сделать, то будет выскакивать сообщение:

-32700 parse error. not well formed

Также напоминаю на всякий случай, что кодировка сообщений должна быть UTF-8. Если это не так, то можно применить патч для автоизменения кодировки. Тут сам патч.

Продолжим. Находим в файле место:

function xmlrpc_message_parse($xmlrpc_message) {

$xmlrpc_message->_parser = xml_parser_create();

// Set XML parser to take the case of tags into account.

xml_parser_set_option($xmlrpc_message->_parser, XML_OPTION_CASE_FOLDING, FALSE);

// Set XML parser callback functions

xml_set_element_handler($xmlrpc_message->_parser, 'xmlrpc_message_tag_open', 'xmlrpc_message_tag_close');

xml_set_character_data_handler($xmlrpc_message->_parser, 'xmlrpc_message_cdata');

xmlrpc_message_set($xmlrpc_message);

и добавляем туда строки:

// Remove BOM utf-8 symbols

$xmlrpc_message->message = str_replace("\xEF\xBB\xBF",'',$xmlrpc_message->message);

У нас должно получится вот что:

function xmlrpc_message_parse($xmlrpc_message) {

$xmlrpc_message->_parser = xml_parser_create();

// Set XML parser to take the case of tags into account.

xml_parser_set_option($xmlrpc_message->_parser, XML_OPTION_CASE_FOLDING, FALSE);

// Set XML parser callback functions

xml_set_element_handler($xmlrpc_message->_parser, 'xmlrpc_message_tag_open', 'xmlrpc_message_tag_close');

xml_set_character_data_handler($xmlrpc_message->_parser, 'xmlrpc_message_cdata');

// Remove BOM utf-8 symbols

$xmlrpc_message->message = str_replace("\xEF\xBB\xBF",'',$xmlrpc_message->message);

xmlrpc_message_set($xmlrpc_message);

После этого осталось настроить сам клиент BloghuB.

Добавляем блог Drupal, пишем логин, пароль и адрес сайта:

http://наш.ru/сайт/xmlrpc.php

После этих манипуляций у меня получилось подружить телефон с блогом на Drupal.

P.S. Используя это приложение нельзя добавлять в текст смайлики от телефона (те, которые можно выбрать из списка), т.к. приложение не знает таких символов и просто не опубликует запись.

P.P.S. А к примеру тут показано, как подключить Windows Live Writer к блогу на Drupal.