代码改变世界

MetaWeblog API调用

2011-05-17 14:28  stubman  阅读(3977)  评论(6编辑  收藏  举报

在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对metaWeblog Api 提供了支持,虽然windows live writer是好用,不过出于对这个接口的好奇,也想自己做个能发博客的小工具.

到处浏览资料,用了一个下午终于成功发布了一篇简陋版博客:)。其实很简单,方法对了很快就连上了。

MetaWeblog API中文说明

1、什么是MetaWeblog API?

MetaWeblog API(MWA)是一个Blog程序接口标准,允许外部程序来获取或者设置Blog的文字和熟悉。他建立在XMLRPC接口之上,并且已经有了很多的实现。

2、基本的函数规范

有三个基本的函数规范:

metaWeblog.newPost (blogid, username, password, struct, publish) 返回一个字符串,可能是Blog的ID。
metaWeblog.editPost (postid, username, password, struct, publish) 返回一个Boolean值,代表是否修改成功。
metaWeblog.getPost (postid, username, password) 返回一个Struct。

其中blogid、username、password分别代表Blog的id(注释:如果你有两个Blog,blogid指定你需要编辑的blog)、用户名和密码。

 

一、要引用的DLL【网上提供的示例多包含了这个DLL】

image

二、要实现的数据结构

 MetaWeblogCode【如不想看代码请自行折叠】

  1 using System;
  2 using CookComputing.XmlRpc;
  3 
  4 namespace metaWeblogTest
  5 {
  6 
  7     #region 微软MSN网站 使用的 MetaWeblog API.
  8     /// 这个结构代表用户的博客基本信息
  9     /// </summary>
10     [XmlRpcMissingMapping(MappingAction.Ignore)]
11     public struct UserBlog
12     {
13         public string url;
14         public string blogid;
15         public string blogName;
16     }
17 
18 
19     /// <summary> 
20     /// 这个结构代表用户信息
21     /// </summary> 
22     [XmlRpcMissingMapping(MappingAction.Ignore)]
23     public struct UserInfo
24     {
25         public string url;
26         public string blogid;
27         public string blogName;
28         public string firstname;
29         public string lastname;
30         public string email;
31         public string nickname;
32     }
33 
34 
35     /// <summary> 
36     /// 这个结构代表博客分类信息
37     /// 这后面的getCategories()方法会取到CATEGORY数据。
38     /// </summary> 
39     [XmlRpcMissingMapping(MappingAction.Ignore)]
40     public struct Category
41     {
42         public string description;
43         public string title;
44     }
45 
46     /// <summary> 
47     /// 这个结构代表博客( 文章 )信息。
48     /// 这后面的 editPost()方法, getRecentPosts()方法 和 getPost()方法 会取倒POST数据 . 
49     /// </summary> 
50     [XmlRpcMissingMapping(MappingAction.Ignore)]
51     public struct Post
52     {
53         public DateTime dateCreated;
54         public string description;
55         public string title;
56         public string postid;
57         public string[] categories;
58     }
59     #endregion
60 
61 
62     #region 网站:http://msdn.microsoft.com/en-us/library/aa905670.aspx
63     ///// <summary> 
64     ///// 微软MSN网站 使用的 MetaWeblog API. 
65     ////  网站:http://msdn.microsoft.com/en-us/library/aa905670.aspx
66     ///// </summary> 
67     public class M_MetaWeblog : XmlRpcClientProtocol
68     {
69 
70 
71         /// <summary> 
72         /// Returns the most recent draft and non-draft blog posts sorted in descending order by publish date. 
73         /// </summary> 
74         /// <param name="blogid"> This should be the string MyBlog, which indicates that the post is being created in the user’s blog. </param> 
75         /// <param name="username"> The name of the user’s space. </param> 
76         /// <param name="password"> The user’s secret word. </param> 
77         /// <param name="numberOfPosts"> The number of posts to return. The maximum value is 20. </param> 
78         /// <returns></returns> 
79         /// TODO:得到最近发布的帖子
80         [XmlRpcMethod("metaWeblog.getRecentPosts")]
81         public Post[] getRecentPosts(
82         string blogid,
83         string username,
84         string password,
85         int numberOfPosts)
86         {
87 
88             return (Post[])this.Invoke("getRecentPosts", new object[] { blogid, username, password, numberOfPosts });
89         }
90 
91 
92         /// <summary> 
93         /// Posts a new entry to a blog. 
94         /// </summary> 
95         /// <param name="blogid"> This should be the string MyBlog, which indicates that the post is being created in the user’s blog. </param> 
96         /// <param name="username"> The name of the user’s space. </param> 
97         /// <param name="password"> The user’s secret word. </param> 
98         /// <param name="post"> A struct representing the content to update. </param> 
99         /// <param name="publish"> If false, this is a draft post. </param> 
100         /// <returns> The postid of the newly-created post. </returns> 
101         /// TODO:增加一个最新的帖子
102         [XmlRpcMethod("metaWeblog.newPost")]
103         public string newPost(
104         string blogid,
105         string username,
106         string password,
107         Post content,
108         bool publish)
109         {
110 
111             return (string)this.Invoke("newPost", new object[] { blogid, username, password, content, publish });
112         }
113 
114         /// <summary> 
115         /// Edits an existing entry on a blog. 
116         /// </summary> 
117         /// <param name="postid"> The ID of the post to update. </param> 
118         /// <param name="username"> The name of the user’s space. </param> 
119         /// <param name="password"> The user’s secret word. </param> 
120         /// <param name="post"> A struct representing the content to update. </param> 
121         /// <param name="publish"> If false, this is a draft post. </param> 
122         /// <returns> Always returns true. </returns> 
123         /// TODO:更新一个帖子
124         [XmlRpcMethod("metaWeblog.editPost")]
125         public bool editPost(
126         string postid,
127         string username,
128         string password,
129         Post content,
130         bool publish)
131         {
132 
133             return (bool)this.Invoke("editPost", new object[] { postid, username, password, content, publish });
134         }
135 
136         /// <summary> 
137         /// Deletes a post from the blog. 
138         /// </summary> 
139         /// <param name="appKey"> This value is ignored. </param> 
140         /// <param name="postid"> The ID of the post to update. </param> 
141         /// <param name="username"> The name of the user’s space. </param> 
142         /// <param name="password"> The user’s secret word. </param> 
143         /// <param name="post"> A struct representing the content to update. </param> 
144         /// <param name="publish"> This value is ignored. </param> 
145         /// <returns> Always returns true. </returns> 
146         /// TODO:删除一个帖子
147         [XmlRpcMethod("blogger.deletePost")]
148         public bool deletePost(
149         string appKey,
150         string postid,
151         string username,
152         string password,
153         bool publish)
154         {
155 
156             return (bool)this.Invoke("deletePost", new object[] { appKey, postid, username, password, publish });
157         }
158 
159 
160         /// <summary> 
161         /// Returns information about the user’s space. An empty array is returned if the user does not have a space. 
162         /// </summary> 
163         /// <param name="appKey"> This value is ignored. </param> 
164         /// <param name="postid"> The ID of the post to update. </param> 
165         /// <param name="username"> The name of the user’s space. </param> 
166         /// <param name="password"></param>
167         /// <returns> An array of structs that represents each of the user’s blogs. The array will contain a maximum of one struct, since a user can only have a single space with a single blog. </returns> 
168         /// TODO:得到用户的博客清单
169         [XmlRpcMethod("blogger.getUsersBlogs")]
170         public UserBlog[] getUsersBlogs(
171         string appKey,
172         string username,
173         string password)
174         {
175 
176             return (UserBlog[])this.Invoke("getUsersBlogs", new object[] { appKey, username, password });
177         }
178 
179         /// <summary> 
180         /// Returns basic user info (name, e-mail, userid, and so on). 
181         /// </summary> 
182         /// <param name="appKey"> This value is ignored. </param> 
183         /// <param name="postid"> The ID of the post to update. </param> 
184         /// <param name="username"> The name of the user’s space. </param> 
185         /// <param name="password"></param>
186         /// <returns> A struct containing profile information about the user. 
187         /// Each struct will contain the following fields: nickname, userid, url, e-mail, 
188         /// lastname, and firstname. </returns> 
189         /// TODO:得到用户信息
190         [XmlRpcMethod("blogger.getUserInfo")]
191         public UserInfo getUserInfo(
192         string appKey,
193         string username,
194         string password)
195         {
196 
197             return (UserInfo)this.Invoke("getUserInfo", new object[] { appKey, username, password });
198         }
199 
200 
201         /// <summary> 
202         /// Returns a specific entry from a blog. 
203         /// </summary> 
204         /// <param name="postid"> The ID of the post to update. </param> 
205         /// <param name="username"> The name of the user’s space. </param> 
206         /// <param name="password"> The user’s secret word. </param> 
207         /// <returns> Always returns true. </returns> 
208         /// TODO:获取一个帖子
209         [XmlRpcMethod("metaWeblog.getPost")]
210         public Post getPost(
211         string postid,
212         string username,
213         string password)
214         {
215 
216             return (Post)this.Invoke("getPost", new object[] { postid, username, password });
217         }
218 
219         /// <summary> 
220         /// Returns the list of categories that have been used in the blog. 
221         /// </summary> 
222         /// <param name="blogid"> This should be the string MyBlog, which indicates that the post is being created in the user’s blog. </param> 
223         /// <param name="username"> The name of the user’s space. </param> 
224         /// <param name="password"> The user’s secret word. </param> 
225         /// <returns> An array of structs that contains one struct for each category. Each category struct will contain a description field that contains the name of the category. </returns> 
226         /// TODO:得到博客分类
227         [XmlRpcMethod("metaWeblog.getCategories")]
228         public Category[] getCategories(
229         string blogid,
230         string username,
231         string password)
232         {
233 
234             return (Category[])this.Invoke("getCategories", new object[] { blogid, username, password });
235         }
236     }
237     #endregion
238 }
239 

三、图示【调用API发送第一篇简单博客】

 image

 

——————————————————————————————————————————

资源链接:

http://www.xmlrpc.com/spec   英文的xml-rpc规范
RFC: MetaWeblog API   MetaWeblog API 规范
http://www.duduwolf.com/post/41.asp  中文翻译的xml-rpc规范(感谢翻译者:滴水)
http://www.XML-RPC.Net XML-RPC的.NET 实现,其中有最新.net2.0的XML-RPC实现的下载
MetaWeblogAPI and MSN Spaces  MSDN上关于MetaWeblog API及MSN Spaces接口的说明及.NET示例