Работаем с MetaWeblog API
В статье рассмотрены основные принципы работы с 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 отличается.
Пример создания новой публикации программно
Для того, чтобы иметь возможность публиковать свои сообщения программно, нам понадобятся:
- XML-RPC.NET
- реализация MetaWeblog API на C#, например, эта
После этого можно написать [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 />}
В результате выполнения вы получите новое сообщение в своем блоге.
Некоторые замечания:
- Перед тем, как публиковать что-то в конкретный блог, необходимо узнать его blogId. Это можно захардкодить или получить это значение программно с помощью других методов.
- Реализация для конкретного блога или CMS может слегка отличаться. Например, в Community Server пользователь должен получить свой API ключ, который он должен передавать в качестве параметра. В Orchard представленная реализация MetaWeblog API работать не будет, так как blogId имеет тип не string, а int. Поэтому необходимо учесть этот момент перед выполнением кода (по поводу Orchard думаю, надо посвятить отдельную статью).
Ссылки:
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |
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... |