在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对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】
二、要实现的数据结构
MetaWeblogCode【如不想看代码请自行折叠】
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发送第一篇简单博客】
——————————————————————————————————————————
资源链接:
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示例