• MetaWeblog API调用


    在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对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示例

  • 相关阅读:
    判断浏览器的类别
    第2章计算机系统第五版Aimin.rar
    QQ软件已被破坏或部分文件丢失
    关于SqlServer服务无法启动的症状分析和解决方法
    T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
    《深入理解计算机系统》笔记(四)虚拟存储器,malloc,垃圾回收【插图】
    Cocos2dx高级开发教程:制作自己的《捕鱼达人》
    算法设计与分析基础(第3版 影印版)
    MySQL数据库常用操作
    第一次面试
  • 原文地址:https://www.cnblogs.com/stubman/p/1954598.html
Copyright © 2020-2023  润新知