Содержание


Расскажите всем: Корпоративные блоги, MetaWeblog и XML-RPC

Создание, форматирование и публикация документов с использованием XML-стандартов и инструментальных средств с открытым исходным кодом

Comments

В настоящее время большинство людей хорошо знакомо с персональными блогами и блогами, спонсируемыми компаниями или отраслевыми структурами. Последние очевидно являются новыми ответвлениями традиционных корпоративных и отраслевых Web-сайтов. Их содержимое может варьироваться от неуклюже составленных анонсов товаров и рекламы до действительно полезных и глубоких исследований тем, связанных с товарами компании и будущими направлениями развития отрасли.

Успех корпоративных и отраслевых блогов, предоставляющих новую и полезную информацию, повышает интерес к ним как к механизму взаимодействия и общения внутри предприятия. Процесс внедрения блогов в организации не должен отличаться от любого другого усовершенствования корпоративной инфраструктуры. Корпоративные блоги, предназначенные для использования сотрудниками компании, обычно содержат чувствительную для бизнес-деятельности информацию и обсуждения, а, следовательно, должны размещаться ИТ-персоналом. Важнейший первый шаг – это выбор правильной платформы для ведения блогов.

Выбор открытой платформы, поддерживающей стандартные API блоггинга, обеспечивает значительные преимущества для пользователей и администраторов. Для пользователей это означает, что они могут добавлять записи блога, используя широкое разнообразие популярных приложений, начиная с плагинов для браузера и заканчивая специфичными для платформы клиентскими приложениями. Для администраторов поддержка общедоступных API может позволить использовать или разрабатывать приложения для управления и администрирования.

Доступно несколько стандартных API блоггинга. На момент написания данной статьи наиболее широко используемыми и поддерживаемыми являются:

  • Blogger. Самый старый из этих API - основанный на технологии XML-RPC интерфейс, первоначально созданный компанией Pyra Labs для своего программного обеспечения Blogger. Первая версия быстро стала использоваться на многих других платформах из-за того, что в качестве стандартного механизма отправки и обмена данными использовала XML, а также из-за того, что использование стандарта XML-RPC позволило реализовывать решения на любом языке программирования, для которого были доступны библиотеки XML-RPC. Google приобрела Blogger в 2003 году, и вскоре после этого вышла новая версия Blogger 2.0 API, которая в настоящее время считается одним из интерфейсов Google Data API.
  • MetaWeblog. Был создан разработчиком программного обеспечения Дэйвом Уайнером (Dave Winer) в 2002 году с целью преодоления ограничений в Blogger 1.0 API. API MetaWeblog основан на XML-RPC и использует концепцию формата Web-фидов RSS (в частности, тег <item>) для просмотра сообщений блогов в виде структурированных данных (в отличие от простых строк, поддерживаемых в Blogger API). Такая интеграция позволяет разработчикам создавать, отправлять, изменять и запрашивать структурированные сообщения блогов, используя знакомую модель.
  • Atom. Этот основанный на технологии XML API, известный как Atom Publishing Protocol, использует в качестве протокола уровня соединений Web-сервисы (а не XML-RPC), поддерживает повышенную защищенность благодаря использованию существующих механизмов HTTP-аутентификации, а также такие современные функциональные возможности, как обнаружение API через использование соответствующего тега <link> в заголовках Web-страницы. Ссылки на дополнительную информацию об этом протоколе приведены в разделе "Ресурсы".

В данной статье рассматривается MetaWeblog.

Выбор платформы поддержки блогов

Самые популярные пакеты ведения блогов, поддерживающие API MetaWeblog, являются системами с открытыми исходными кодами и, следовательно, могут устанавливаться и использоваться в вашей внутренней корпоративной инфраструктуре. Популярными вариантами являются:

  • BLOG:CMS. Этот пакет, поставляемый под лицензией GNU General Public License (GPL), требует наличия сервера Apache Web Server, PHP и SQL-базы данных (например, MySQL или SQLite).
  • Blojsom. Этот пакет, поставляемый под лицензией Berkeley Software Distribution (BSD), требует использования языка Java™, сервера приложений JavaServer Pages (JSP), например, JBoss, Jetty или Apache Tomcat, а также SQL-базы данных.
  • Drupal. Пакет Drupal, поставляемый по лицензии GPL, является прежде всего системой управления контентом (CMS), но также поддерживает и MetaWeblog. Drupal требует наличия Web-сервера Apache или Microsoft® Internet Information Services (IIS), PHP и MySQL или PostgreSQL. Проводятся работы по реализации поддержки сервера Microsoft SQL.
  • Movable Type. Этот GPL-пакет требует наличия Web-сервера Apache или IIS, PHP, Perl и SQL-базы данных. Недавно сообществом разработчиков Movable Type было создано ответвление OpenMelody, которое является новым, но определенно заслуживающим внимания продуктом.
  • Pebble. Этот BSD-пакет был написан на основе MetaWeblog и требует использования языка Java и сервера приложений JSP version 2.0/Servlet version 2.4 (например, Tomcat). Содержимое сохраняется на сервере в XML, поэтому база данных не требуется.
  • Roller. Этот пакет под лицензией Apache, разрабатываемый Apache Foundation, требует использования языка программирования Java, сервера приложений JSP 2.0/Servlet 2.4 (например, Tomcat) и SQL-базы данных.
  • WordPress. Этот GPL-пакет требует использования Apache Web Server, Perl и MySQL.

Выбор пакета для использования зависит, главным образом, от ориентации Web-инфраструктуры - Web-серверы или серверы приложений. Опытные блоггеры сразу же распознают WordPress и Movable Type, которые, так же как BLOG:CMS и Drupal, требуют наличия только Web-сервера. Blojsom, Pebble и Roller являются мощными пакетами поддержки блогов, использующими сервер приложений, но отличающимися по требованиям к реляционной базе данных (Pebble вообще не использует базу данных!).

API MetaWeblog

API MetaWeblog делает возможным отправку, извлечение и редактирование записей блога с использованием любого программного пакета, поддерживающего его. Многие люди просто создают записи блога интерактивно посредством редактора в своем блоге, но API MetaWeblog позволяет использовать намного более функциональное программное обеспечение, начиная от настольных приложений и заканчивая пакетами, основанными на браузерах, таких как ScribeFire (рассматривается ниже в данной статье). Кроме того, API MetaWeblog облегчает системным администраторам задачу выполнения резервного копирования и архивирования записей блогов, а также упрощает миграцию на другие пакеты поддержки блогов, при необходимости.

API состоит из небольшого числа методов, что облегчает его изучение. К ним относятся:

  • editPost
      boolean metaWeblog.editPost(string postid, 
                                  string username,
                                  string password, 
                                  struct content, 
                                  boolean publish)
  • getCategories
      struct metaWeblog.getCategories(string blogid, 
                                      string username,
                                      string password)
  • getPost
      struct metaWeblog.getPost(string postid, 
                                string username,
                                string password)
  • getRecentPosts
      struct metaWeblog.getRecentPosts(string postid, 
                                       string username,
                                       string password, 
                                       integer numberOfPosts)
  • newMediaObject
      struct metaWeblog.newMediaObject(string blogid, 
                                       string username,
                                       string password, 
                                       struct content)
  • newPost
      string Post metaWeblog.newPost(string blogid,
                                     string username, 
                                     string password,
                                     struct content, 
                                     boolean publish)

Параметрами для этих методов являются:

  • blogid. Идентифицирует блог, к которому нужно подключиться.
  • content. Структура, содержащая данные для отдельной записи блога.

    Определенными элементами этой структуры являются возможные значения для типа <item> в RSS 2.0: author (автор), category (категория), comments (комментарии), description (описание), enclosure (конверт), guid (идентификатор), link (ссылка), pubDate, source (источник) и title (заголовок). Использование этих стандартных значений обеспечивает формирование хорошо известного словаря для метаданных и содержимого блога. RSS-элементы, например enclosure, имеющие обязательные атрибуты, передаются через структуру, элементы которой обеспечивают эти значения. Для элементов блога тремя основными элементами данной структуры являются title, link и description.

    Метод newMediaObject позволяет передавать файл (обычно аудио- или видео-файл) на блог-сервер. Этот метод требует, чтобы предоставляемая структура содержала двоичное содержимое элемента (реальное содержимое файла, кодировка base64) имя (имя файла для использования на блог-сервере) и тип (MIME-тип файла).

  • numberOfPosts. Определяет максимальное количество сообщений для извлечения.
  • password. Определяет пароль, который используется для аутентификации в блоге.
  • postid. Идентифицирует конкретное сообщение, которое нужно изменить или извлечь.
  • publish. Определяет, нужно ли опубликовать запись блога (True) или оставить новую/обновленную запись в черновиках (False).
  • username. Определяет имя пользователя, использующееся для аутентификации в блоге.

Методы metaWeblog возвращают:

  • editPost. Всегда возвращает True.
  • getCategories. Возвращает структуру (struct), идентифицирующую каждую доступную категорию и имеющую три строки: description (описание), htmlUrl и rssUrl.
  • getPost. Возвращает структуру (struct) с теми же элементами, которые можно использовать в struct, передаваемой в качестве параметра в методы newPost и editPost.
  • getRecentPosts. Возвращает массив структур, соответствующих последним сообщениям блога. Каждая структура в этом массиве содержит те же элементы, которые возвращаются при вызове getPost.
  • newMediaObject. Возвращает структуру, содержащую элемент url, предоставляющий URL-адрес файла, используя либо HTTP, либо FTP.
  • newPost. Возвращает строку, которую можно использовать как идентификатор blogid в вызовах editPost или getPost.

Примеры MetaWeblog-кода

Описание API - это интересная информация, но ничто не сравнится с практическими примерами, особенно когда использование этого API требует применения другого потенциально незнакомого API (в данном случае - API XML-RPC). В следующих двух разделах рассказывается, как использовать самый популярный метод MetaWeblog, newPost, для создания нового сообщения различными способами.

Создание простого сообщения с использованием MetaWeblog

В листинге 1 показан пример очень простой активизации метода metaWeblog.newPost.

Листинг 1. Простое сообщение в MetaWeblog
import java.util.*;
import java.io.*;
import java.net.URL;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class DemoPost {

    public static void main(String[] args) throws Exception {

// Настройка подключения XML-RPC к серверу
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php"));
        XmlRpcClient client = new XmlRpcClient();
        client.setConfig(config);

// Настройка параметров, требуемых для метода newPost 
        Map<String, String> post = new HashMap<String, String>();
        post.put("title", "Hello, Blog!");
        post.put("link", "http://www.vonhagen.org/");
        post.put("description", "This is the content of a trivial post.");
        Object[] params = new Object[]{"1", "admin", "password", post, Boolean.TRUE};

// Вызов newPost
        String result = (String) client.execute("metaWeblog.newPost", params);
        System.out.println(" Created with blogid " + result);

    }
}

Первый блок кода метода main конфигурирует инфраструктуру XML-RPC, которую использует MetaWeblog, устанавливая клиентское соединение по URL-адресу http://wordpress-host/wordpress/xmlrpc.php, который является URL-адресом XML-RPC моего примера блог-сервера WordPress. Различные блог-серверы имеют различные URL-адреса XML-RPC. Конкретный необходимый URL-адрес приведен в документации вашего блог-сервера.

Второй блок кода создает хэш-карту (hash map) и заполняет ее парами имя-значение, предоставляющими информацию, необходимую для формирования сообщения блога. После установки значений для title, link и description хэш-карта упаковывается в массив вместе с другими параметрами, необходимыми для метода metaWeblog.newPost.

Третий блок кода активизирует метод metaWeblog.newPost, используя клиентское соединение XML-RPC, созданное в первом блоке кода. Затем этот код выводит строку, возвращенную методом, которая является идентификатором blogid созданной записи удаленного блога.

Публикация содержимого файла с использованием MetaWeblog

Предыдущий пример интересен, но шансов на то, что вы захотите повторно реализовать Twitter в формате блога, публикуя отдельные короткие строки, совсем не много. Более вероятно, что вы захотите создать файл, используя любимый текстовый редактор, а затем опубликовать этот файл в блоге под специальным заголовком.

Пример, приведенный в листинге 2, создан на основе предыдущего и позволяет с помощью метода metaWeblog.newPost опубликовать содержимое файла и, при необходимости, указать заголовок сообщения. Эти элементы указываются в командной строке при выполнении приложения.

Листинг 2. Публикация содержимого файла
import java.util.*;
import java.io.*;
import java.net.URL;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class DemoPostFile {

    private static byte[] readFromFile(String src) throws Exception {
        byte data[];
        File file = new File(src);
        InputStream in = new FileInputStream(src);
        data = new byte[(int)file.length()];
        in.read(data);
        in.close();
        return data;
    }

    public static void main(String[] args) throws Exception {

        String filename = null;
        String title = "Sample Post From a File";

// Проанализировать и применить аргументы командной строки
        if (args.length > 1) {
            filename = args[0];
            title = args[1];
        } else if (args.length == 1) {
            filename = args[0];
            title = "Posted From File: " + filename;
        } else {
            System.out.println("Usage: DemoPostFile filename [title] ");
            return;
        }

// Настроить подключение XML-RPC к серверу
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php"));
        XmlRpcClient client = new XmlRpcClient();
        client.setConfig(config);

// Прочитать сообщение из файла и настроить параметры, необходимые 
// для метода newPost 
        String bits = new String(readFromFile(filename));
        System.out.println(bits);
        Map<String, String> post = new HashMap<String, String>();
        post.put("title", title);
        post.put("description", bits);
        Object[] params = new Object[]{"1", "admin", "password", post, true};

// Вызов newPost
        String result = (String) client.execute("metaWeblog.newPost", params);
        System.out.println(" Created with blogid " + result);
    }
}

Первый метод в этом приложении - приложение readFromFile, которое объявляется как static для упрощения интеграции с использованием метода static main для анализа аргументов командной строки.

Первый блок кода в методе main этого приложения инициализирует две переменные, в которых размещаются имя файла, содержащего элемент блога, который будет публиковаться, и заголовок для сообщения. Затем анализируются аргументы, с которыми было вызвано приложение, чтобы определить, присутствует ли имя файла, заголовок (или то и другое), и предпринимаются соответствующие действия.

Следующий блок кода инициализирует клиентское соединение XML-RPC с сервером блогов. За ним следует блок, читающий содержимое указанного в командной строке файла в переменную и устанавливающий другие переменные, необходимые для использования метода metaWeblog.newPost. Последний блок кода вызывает этот метод и выводит код результата, которым является идентификатор blogid сообщения на блог-сервере.

Готовые инструментальные программы на базе MetaWeblog

Простые программы, подобные рассмотренной в предыдущем разделе, подходят не всем: не каждому захочется создавать свои собственные инструментальные средства, самостоятельно запуская программы из обычной командной строки. Основным мотивом внедрения блог-серверов, использующих стандартные API, такие как MetaWeblog, является возможность использовать разнообразные приложения, писать на различных языках программирования и работать с различными операционными системами и средами. Существует много клиентских приложений, облегчающих создание и публикацию записей блогов, и каждое из них имеет свои собственные возможности и своих поклонников.

Одним из наиболее полезных клиентских приложений для MetaWeblog является ScribeFire (см. раздел "Ресурсы") - дополнительный модуль к Mozilla Firefox, реализующий полнофункциональный редактор блога в Firefox, который облегчает публикацию блогов (возможно даже простое перетаскивание отформатированного текста из других Web-страниц или документов), отправку изображений и многое другое. На рисунке 1 показано использование ScribeFire (нижняя часть окна Firefox) для публикации в блоге WordPress (верхняя часть окна Firefox).

Рисунок 1. Публикация в WordPress при помощи ScribeFire
Рисунок 1. Публикация в WordPress при помощи ScribeFire
Рисунок 1. Публикация в WordPress при помощи ScribeFire

Клиентские приложения MetaWeblog обычно также позволяют настраивать подключения к нескольким блогам и публиковать одно и то же содержимое в разные блоги. Такая функциональность значительно облегчает, например, передачу сообщения из внутрифирменного блога во внешний корпоративный блог. На рисунке 2 показано использование ScribeFire (нижняя часть окна Firefox) для публикации того же содержимого, которое изображено на рисунке 1, в блог Pebble (верхняя часть окна Firefox).

Рисунок 2. Публикация в Pebble при помощи ScribeFire
Рисунок 2. Публикация в Pebble при помощи ScribeFire
Рисунок 2. Публикация в Pebble при помощи ScribeFire

Pebble: открытое программное обеспечение, основанное на открытых стандартах

Примеры инструментальных программ, предоставленные в данной статье, являются лишь верхушкой айсберга MetaWeblog. Любую программу, поддерживающую API MetaWeblog, можно использовать для взаимодействия с любым блог-сервером, поддерживающим этот API. Можно также использовать API MetaWeblog как основу для реализации блог-сервера, как в случае блог-сервера Pebble (см. раздел "Ресурсы").

Блог-сервер Pebble поставляется под лицензией BSD (Berkeley Software Distribution) и написан на основе MetaWeblog. Поскольку Pebble является программным обеспечением с открытыми исходными кодами, его код легко доступен и может обеспечить много полезных примеров использования различных вызовов API MetaWeblog. На рисунке 3 показан стандартный интерфейс Pebble.

Рисунок 3. Страница приветствия Pebble
Рисунок 3. Страница приветствия Pebble
Рисунок 3. Страница приветствия Pebble

Более интересным аспектом Pebble является то, что в отличие от большинства других блог-серверов содержимое блога на сервере Pebble хранится в виде XML-файлов без использования базы данных. Отсутствие сервера базы данных делает Pebble менее требовательным к системным ресурсам по сравнению с большинством других блог-серверов; это также упрощает такие задачи, как резервное копирование. Сообщения блога резервируются как часть стандартной файловой системы без необходимости создания дампов базы данных или контрольных точек.

Заключение

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


Ресурсы для скачивания


Похожие темы

  • Оригинал статьи "Spread the word: Enterprise blogging, MetaWeblog, and XML-RPC" (EN).
  • API MetaWeblog RFC. Прочтите окончательный вариант RFC MetaWeblog, который является определяющим ресурсом для API MetaWeblog.(EN)
  • Общий API MetaWeblog. Информация об использовании API MetaWeblog, включая дискуссии и примеры реализаций MetaWeblog на различных языках программирования.(EN)
  • XML-RPC.com. Общая и подробная информация об XML-RPC, API-интерфейсах на базе этой спецификации, инструментальных средствах XML-RPC и многом другом.(EN)
  • Blogapps Project. Изучите этот проект и его отличный набор примеров программ, демонстрирующих, как использовать различные API для работы с блогами. Хотя в основном этот проект концентрируется на API Atom, он включает в себя также примеры использования API MetaWeblog. Эти примеры используются в замечательной книге Дэйва Джонсона (Dave Johnson) RSS и Atom в действии (Manning, 2006 г.) (EN), которая является важным ресурсом по технологиям RSS и Atom-фидов, а также по Atom Publishing API.
  • Internet Engineering Task Force (IETF) RFC 5023. Спецификация протокола Atom Publishing Protocol. Сопутствующий ему формат Atom Syndication Format, использующийся для Web-фидов, был опубликован как проект стандарта IETF в RFC 4287.(EN)
  • Blogger, MetaWeblog и Atom. Загрузите самые популярные API поддержки блогов на момент написания статьи.(EN)
  • Pebble. Посетите этот сайт для получения подробной информации и загрузочных файлов Pebble, основанного на MetaWeblog блог-сервера.(EN)
  • Apache XML-RPC. Загрузите новейшую версию.(EN)
  • Зеркальные сайты Apache XML-RPC. Загрузите JAR-файлы, необходимые для реализации Apache XML-RPC.(EN)
  • ScribeFire. Загрузите новейшую версию плагина для Firefox.(EN)
  • Сертификация IBM XML. Информация о том, как можно получить сертификат IBM-Certified Developer по XML и смежным технологиям.(EN)
  • Техническая библиотека XML. В разделе XML сайта developerWorks размещено множество технических статей и советов, учебных руководств, стандартов и книг IBM Redbooks. (EN)
  • Ознакомительные версии продуктов IBM. Загрузите или изучите интерактивные ознакомительные версии в IBM SOA Sandbox и освойте инструментальные средства разработки программного обеспечения и продукты промежуточного уровня DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.(EN)
  • Подкасты developerWorks. Интересные интервью и дискуссии для разработчиков программного обеспечения.(EN)

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Open source
ArticleID=513196
ArticleTitle=Расскажите всем: Корпоративные блоги, MetaWeblog и XML-RPC
publish-date=08252010