Работаем с MetaWeblog API

понедельник, 29 ноября 2010, Александр Краковецкий

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

API реализовано в виде XML-RPC веб-сервиса, который состоит из нескольких методов:

  • metaWeblog.newPost()
  • metaWeblog.getPost()
  • metaWeblog.editPost()
  • metaWeblog.getCategories()
  • metaWeblog.getRecentPosts()
  • metaWeblog.newMediaObject()

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

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

    Определенными элементами этой структуры являются возможные значения для типа в 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 в 2002 году являлись ограничения Blogger API, который использовался для этих же целей. Еще один API для работы с блогами - Atom Publishing Protocol стал интернет-стандартом IETF в октябре 2007 года. Еще одним популярным протоколом для публикации является Movable Type API. Нужно сказать, что современные CMS и blog engines поддерживает как минимум один из выше перечисленных протоколов.

MetaWeblog API поддерживают такие системы управления контентом и блогодвижки:

  • b2evolution
  • bBlog
  • BLOG:CMS
  • Blojsom
  • Blox.pl
  • Telligent Community Server
  • Telligent Graffiti
  • dasBlog
  • DotNetNuke
  • Drupal
  • Elgg
  • Expression Engine
  • Jahia
  • Kaywa
  • Mac OS X Server Wiki Server
  • Mephisto
  • Microsoft Office SharePoint Server 2007
  • Midgard
  • mojoPortal
  • Movable Type 2.1+
  • MyOpera
  • OboLog
  • Pebble
  • Pivotlog
  • Rollerweblogger
  • Quick Blog
  • Serendipity weblog
  • Subtext
  • TIMTAB
  • WordPress
  • Windows Live Spaces
  • Orchard
  • Oxite
  • WordPress
  • Kooboo
  • Telerik Sitefinity

Самым популярным инструментом для операционных систем семейства Windows, который поддерживает MetaWeblog API, является программа Windows Live Writer. С полным списком клиентов можно ознакомиться по ссылке: http://ru.wikipedia.org/wiki/MetaWeblog.

Реализация MetaWeblog API

Если говорить о реализации, то шаблон должен выглядеть приблизительно таким образом:

using System;

using System.Web;
using CookComputing.XmlRpc;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Collections.Generic;

using System.IO;

[XmlRpcService(
    Name = "blogger",
    Description = "This is a sample XML-RPC service illustrating method calls with simple parameters and return type.",
    AutoDocumentation = true)]
[XmlRpcUrl("http://www.gtrifonov.com/MetaBlogApi.ashx")]

public class blogger : XmlRpcService
{


    [XmlRpcMethod("blogger.getUsersBlogs")]
    public XmlRpcStruct[] getUsersBlogs(string appKey, string username, string password)
    {       
        ....
        return struct;
    }

    [XmlRpcMethod("metaWeblog.setTemplate")]
    public bool setTemplate(string appKey, string blogid, string username, string password, string template, string   templateType)
    {
        return true;
    }

    [XmlRpcMethod("metaWeblog.getCategories")]
    public XmlRpcStruct[] getCategories(string blogid, string username, string password)
    {
        XmlRpcStruct rpcstruct = new XmlRpcStruct();

        rpcstruct.Add("description", "description");
        rpcstruct.Add("categoryid", "123");
        rpcstruct.Add("title", "title");

        return new XmlRpcStruct[] { rpcstruct };
    }

    [XmlRpcMethod("metaWeblog.getRecentPosts")]
    public XmlRpcStruct[] getRecentPosts(string blogid, string username, string password,int numberOfPosts)
    {
        XmlRpcStruct[] posts = new XmlRpcStruct[5];
       .......
        return posts;
    }
    [XmlRpcMethod("metaWeblog.getTemplate")]
    public string getTemplate(string appKey, string blogid, string username, string password, string templateType)
    {      
        .....................
        return id;
    }
    [XmlRpcMethod("metaWeblog.editPost")]
    public bool editPost(string postid, string username, string password, XmlRpcStruct rpcstruct, bool publish)
    {
        ..................
        return true;
    }
    [XmlRpcMethod("metaWeblog.getPost")]
    public XmlRpcStruct getPost(string postid, string username, string password)
    {
       ..................
        return rpcstruct;
    }

    [XmlRpcMethod("blogger.deletePost")]
    public bool deletePost(string appKey, string postid, string username, string password, bool publish)
    {
        return false;

    }
    [XmlRpcMethod("metaWeblog.newMediaObject")]
    public XmlRpcStruct newMediaObject(string blogid, string username, string password, XmlRpcStruct rpcstruct)
    {
        bool allowed = System.Web.Security.FormsAuthentication.Authenticate(username, password);
        
        return rstruct;
    }   

}

Скачать пример реализации MetaWeblog API на C#

Каждая система, которая поддерживает MetaWeblog API, содержит так называемый endpoint, т.е. адрес, по которому можно обратиться к API. Для каждой системы этот endpoint отличается.

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

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

После этого можно написать [2]:

class Program<br />{<br />    static void Main(string[] args)<br />    {<br />        MetaWeblogClient blog = new MetaWeblogClient();<br />        blog.Url = "http://www.pluralsight.com/community/blogs/metablog.ashx";<br /><br />        // here's how you post a new entry...<br />        Post newPost = new Post();<br />        newPost.dateCreated = DateTime.Now;<br />        newPost.title = "Test post from Metablog Api";<br />        newPost.description = "This is the body of the post";<br />        newPost.categories = new string[] { "WCF", "WF" };<br />        blog.newPost("blogid", "username", "password", newPost, true);<br /><br />        // here's how you retrieve the most recent entries...<br />        Post[] posts = blog.getRecentPosts("blogid", "username", "password", 5);<br />        foreach (Post post in posts)<br />            Console.WriteLine(post.title);<br />    }<br />}

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

Некоторые замечания:

  1. Перед тем, как публиковать что-то в конкретный блог, необходимо узнать его blogId. Это можно захардкодить или получить это значение программно с помощью других методов.
  2. Реализация для конкретного блога или CMS может слегка отличаться. Например, в Community Server пользователь должен получить свой API ключ, который он должен передавать в качестве параметра. В Orchard представленная реализация MetaWeblog API работать не будет, так как blogId имеет тип не string, а int. Поэтому необходимо учесть этот момент перед выполнением кода (по поводу Orchard думаю, надо посвятить отдельную статью).

Ссылки:

  1. Расскажите всем: Корпоративные блоги, MetaWeblog и XML-RPC
  2. Programming the MetaWeblog API in .NET/C#
  3. API specification
  4. implementation of MetaWeblogAPI
  5. Wikipedia - MetaWeblog API

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Pluralsight


Сайт:
http://www.pluralsight-training.net/

Pluralsight Pluralsight provides high-quality training solutions for Microsoft .NET developers that can fit any schedule or budget. The revolutionary Pluralsight On-Demand! training library provides developers wi...

Ищите нас в интернетах!

Комментарии

Свежие вакансии