`

在Asp.Net中创建MetaWeblog API

 
阅读更多

出处:http://edu.cnzz.cn/NewsInfo/19645.aspx

概念

  metaweblog是基于XML的RPC通信( 下载 )。这意味着你有一组预先定义的结构(简单的数据类型属性 )表示,正转客户端和服务器之间。 

  您需要使用MetaWeblog API 的以下六个结构:

  BlogInfo: 有关博客的网址, ID或名称。

  UserInfo: 博客用户的ID ,名字,姓氏或电子邮件。

  Post: 就是博客帖子,标题,正文和类别。

  CategoryInfo: 博客类别信息,编号和名称。

  MediaObject: 有关媒体对象(图像,音频和其他文件类型)的名称,类型和数据。

  MediaObjectInfo: 媒体对象。

  作为一般规则,您可以请记住, metaweblog API使用字符串类型为基本类型,参数和返回类型和不存在任何整数类型。 在几个地方也用到了布尔和Base64编码的字符串两个类型。

  MetaWeblog API有九个方法:

  metaWeblog.newPost: 增加一个新帖子。

  metaWeblog.editPost: 更新帖子。

  metaWeblog.getCategories: 获得博客的类别。

  metaWeblog.getPost: 得到一个单一的POST数据。

  metaWeblog.getRecentPosts: 得到的最近的帖子。

  metaWeblog.newMediaObject: 增加一个新的媒体对象。

  blogger.deletePost: 删除一个帖子。

  blogger.getUserInfo: 获得用户信息。

  blogger.getUsersBlogs: 得到用户的blog清单。

  如何创建metaweblog

  1.首先下载XML-RPC.NET, 然后添加引用到项目中。。

  在Asp.Net中创建MetaWeblog API

  2.创建一个 HTTP Handler 或者 WebService。这里创建的是HTTP处理程序MetaWeblogAPI.ashx。并设置入口点- Class="MetaWeblogSample.MetaWeblog"。

<%@ WebHandler Language="C#" CodeBehind="MetaWeblogAPI.ashx.cs" Class="MetaWeblogSample.MetaWeblog" %>


  3.创建结构Structures( Structs.cs ),至于如何正确创建此结构,请看 MetaWeblog API 规范。

  下面的代码是我创建的结构。 你也可以在你的项目中使用相同的代码, 因为这些结构是固定不变的。

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CookComputing.XmlRpc;
namespace MetaWeblogSample
{
  #region Structs
  public struct BlogInfo
  {
    public string blogid;
    public string url;
    public string blogName;
  }
  public struct Category
  {
    public string categoryId;
    public string categoryName;
  }
  [Serializable]
  public struct CategoryInfo
  {
    public string description;
    public string htmlUrl;
    public string rssUrl;
    public string title;
    public string categoryid;
  }
  [XmlRpcMissingMapping(MappingAction.Ignore)]
  public struct Enclosure
  {
    public int length;
    public string type;
    public string url;
  }
  [XmlRpcMissingMapping(MappingAction.Ignore)]
  public struct Post
  {
    public DateTime dateCreated;
    public string description;
    public string title;
    public string[] categories;
    public string permalink;
    public object postid;
    public string userid;
    public string wp_slug;
  }
  [XmlRpcMissingMapping(MappingAction.Ignore)]
  public struct Source
  {
    public string name;
    public string url;
  }
  public struct UserInfo
  {
    public string userid;
    public string firstname;
    public string lastname;
    public string nickname;
    public string email;
    public string url;
  }
  [XmlRpcMissingMapping(MappingAction.Ignore)]
  public struct MediaObject
  {
    public string name;
    public string type;
    public byte[] bits;
  }
  [Serializable]
  public struct MediaObjectInfo
  {
    public string url;
  }
  #endregion
}

  
 4.创建 MetaWeblog API 接口( IMetaWeblog.cs )。这个接口的定义也是 MetaweBlog的规范。 其中有 两组核心 MetaWeblog API 和 Blogger API。代码如下:

  
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CookComputing.XmlRpc;
namespace MetaWeblogSample
{
  public interface IMetaWeblog
  {
    #region MetaWeblog API
    [XmlRpcMethod("metaWeblog.newPost")]
    string AddPost(string blogid, string username, string password, Post post, bool publish);
    [XmlRpcMethod("metaWeblog.editPost")]
    bool UpdatePost(string postid, string username, string password, Post post, bool publish);
    [XmlRpcMethod("metaWeblog.getPost")]
    Post GetPost(string postid, string username, string password);
    [XmlRpcMethod("metaWeblog.getCategories")]
    CategoryInfo[] GetCategories(string blogid, string username, string password);
    [XmlRpcMethod("metaWeblog.getRecentPosts")]
    Post[] GetRecentPosts(string blogid, string username, string password, int numberOfPosts);
    [XmlRpcMethod("metaWeblog.newMediaObject")]
    MediaObjectInfo NewMediaObject(string blogid, string username, string password,
      MediaObject mediaObject);
    #endregion
    #region Blogger API
    [XmlRpcMethod("blogger.deletePost")]
    [return: XmlRpcReturnValue(Description = "Returns true.")]
    bool DeletePost(string key, string postid, string username, string password, bool publish);
    [XmlRpcMethod("blogger.getUsersBlogs")]
    BlogInfo[] GetUsersBlogs(string key, string username, string password);
    [XmlRpcMethod("blogger.getUserInfo")]
    UserInfo GetUserInfo(string key, string username, string password);
    #endregion
  }
}

5. 也是最后一步,实现接口。。此外,你还需要一个方法来验证用


using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CookComputing.XmlRpc;
using System.Collections.Generic;
///
/// 注释说明来自网络。。
///
namespace MetaWeblogSample
{
  public class MetaWeblog : XmlRpcService, IMetaWeblog
  {
    #region Public Constructors
    public MetaWeblog()
    {
    }
    #endregion
    #region IMetaWeblog Members
    string IMetaWeblog.AddPost(string blogid, string username, string password,
      Post post, bool publish)
    {
      if (ValidateUser(username, password))
      {
        string id = string.Empty;
        // TODO: 请根据实际情况返回一个字符串,一般是Blog的ID。
        return id;
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    bool IMetaWeblog.UpdatePost(string postid, string username, string password,
      Post post, bool publish)
    {
      if (ValidateUser(username, password))
      {
        bool result = false;
        // TODO: 请根据实际情况返回一个布尔值,表示是否更新成功。
        return result;
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    Post IMetaWeblog.GetPost(string postid, string username, string password)
    {
      if (ValidateUser(username, password))
      {
        Post post = new Post();
        // TODO: 请根据实际情况返回一个Struct { Struct是一个规范格式,
        //    格式就是Post的属性,注意category是一个数组,是这个Post所属的类别。
        //    如果类别不存在,服务器端将只处理存在的类别}。
        return post;
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    CategoryInfo[] IMetaWeblog.GetCategories(string blogid, string username, string password)
    {
      if (ValidateUser(username, password))
      {
        List<CategoryInfo> categoryInfos = new List<CategoryInfo>();
        // TODO: 请根据实际情况获取Blog的类别,并设置CategoryInfo。
        return categoryInfos.ToArray();
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    Post[] IMetaWeblog.GetRecentPosts(string blogid, string username, string password,
      int numberOfPosts)
    {
      if (ValidateUser(username, password))
      {
        List<Post> posts = new List<Post>();
        // TODO: 返回一个结构(struct)的数组(array)。
        //    每一个Struct包含getPost返回值一样的结构。请设置后返回。
        return posts.ToArray();
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    MediaObjectInfo IMetaWeblog.NewMediaObject(string blogid, string username, string password,
      MediaObject mediaObject)
    {
      if (ValidateUser(username, password))
      {
        MediaObjectInfo objectInfo = new MediaObjectInfo();
        // TODO: 返回一个数组
        //    其中blogid、username、password分别代表Blog的id(注释:如果你有两个Blog,blogid指定你需要编辑的blog)、用户名和密码。
        //    struct必须包含name, type 和bits三个元素,当然也可以包含其他元素。
        return objectInfo;
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    bool IMetaWeblog.DeletePost(string key, string postid, string username, string password, bool publish)
    {
      if (ValidateUser(username, password))
      {
        bool result = false;
        // TODO: 请根据实际情况返回一个布尔值,表示是否删除成功。
        return result;
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    BlogInfo[] IMetaWeblog.GetUsersBlogs(string key, string username, string password)
    {
      if (ValidateUser(username, password))
      {
        List<BlogInfo> infoList = new List<BlogInfo>();
        // TODO: 请根据实际情况获取 当前用户 Blog 信息,并设置用户 Blog 信息。
        return infoList.ToArray();
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    UserInfo IMetaWeblog.GetUserInfo(string key, string username, string password)
    {
      if (ValidateUser(username, password))
      {
        UserInfo info = new UserInfo();
        // TODO: 请根据实际情况获取 当前用户 信息,并设置用户 信息。
        return info;
      }
      throw new XmlRpcFaultException(0, "User is not valid!");
    }
    #endregion
    #region Private Methods
    private bool ValidateUser(string username, string password)
    {
      bool result = false;
      // TODO: Implement the logic to validate the user
      return result;
    }
    #endregion
  }
}

6.编译通过了,测试下: http://localhost:1269/MetaWeblogAPI.ashx

  在Asp.Net中创建MetaWeblog API在Asp.Net中创建MetaWeblog API

  测试是通过了,具体如何怎么用在博客上我也没做出来,还得研究。值得提醒的是 通过 http://www.xmlrpc.com 下载 的 xml-rpc.net 包包已经包含各个结构,接口和方法的代码,请自行研究。

  附件:MetaWeblogSample.zip下载地址:http://file.ddvip.com/2008_10/1224235867_ddvip_8763.zip

分享到:
评论

相关推荐

    通过metaWeblog Api发布Wordpress博客 实例代码

    下载下来,修改run.php 把用户名密码,博客地址改成你自己的。直接执行php run.php即可发布一篇博客到你的博客中。

    利用Metaweblog技术的API接口同步到多个博客网站(详细)-附件资源

    利用Metaweblog技术的API接口同步到多个博客网站(详细)-附件资源

    dotnetcore实现metaweblog代理

    使用dotnetcore实现metaweblog服务代理,在blog发布前进行预处理,或者发布给多个博客平台

    博易博客 多用户博客程序

    API MetaWeblog, javascript API 以及全部的 SOAP web service API Tracking scripts 管理员可以更改 tracking script. 可运行于所有的主题风格 HTML 首部标签 管理员可以在后台添加自定义的首部 程序文件扩展名 ...

    MetaWeblogPortable:用于可移植类库的MetaWeblogSharp库的端口

    MetaWeblog.Portable是一个可移植类库,可轻松与MetaWeblogAPI进行交互。 如果您仍然被迫使用MetaWeblogAPI,请向我们... 请在GitHub上按照创建一个问题。 Twitter账号 通过在Twitter上关注AdvancedREI 博客 在上阅

    Bitrac单用户博客 v1.25.0.2500.cab

    支持 MetaWeblog API,可以使用 Live Writer 或者 Word 2007 在本地书写博客 方便的数据备份功能,可以直接把你的备份数据发送到你设定的邮箱 程序自动升级功能,让你不用再为升级博客而要进行大量操作而烦恼 ...

    基于Go-Gin 开发的一个博客系统

    - 支持 Metaweblog API,接口地址:http://example.com/xmlrpc ,支持通过Metaweblog API发布。(我喜欢使用mweb写markdown,直接发布) 更多功能欢迎大家自己挖掘,或者有好的意见和建议欢迎拍砖。 ## 项目概述 ...

    webapi-vim:Web API的vim接口

    MetaWeblog API 该库包含: XML解析器 HTML解析器(Hack Way) JSON解析器 BASE64哈希算法 SHA1哈希算法 HMAC HASH算法 位运算库 “ UTF-8到Unicode”的转换器 安装 将该库中的文件复制到您的.vim目录。 或者,...

    Java 开源博客 Solo v2.9.8

    Markdown、TinyMCE、KindEditor置顶/相关/随机/站外相关文章文章、页面永久链接文章草稿夹、签名档、更新提示多用户、多语言、多主题、插件MetaWeblog API 安装JDK 环境准备好之后下载最新的 Solo 包解压,进入解压...

    Java博客系统Zblog2.zip

    支持metaWeblog Api(支持windows live writer等离线博客编写) WordPress站点xml文件导入功能(支持文章、附件及标签) 文章标签tag功能、私密文章支持、文章归档 文章markdown/富文本编辑支持、快速编辑 ...

    B3LOG Solo 开源博客 v0.6.7.zip

    B3LOG Solo更新说明:0.6.7 •11984 标签导出 feature •11976 目录生成插件 feature •11975 community 皮肤问题 bug skin ...MetaWeblog API 数据备份/恢复     相关阅读 同类推荐:博客系统下载

    微软CMS/Blog系统oXite

    用其架设博客平台可以拥有博客发布,引用通告、匿名评论和评论审查等博客系统基本功能,此外还可对评论进行管理,任何页面均可做为RSS源输出,并带有一个Web管理面板,支持MetaWebLog API。不过,就现在所知道的情况...

    dotnet-cnblogs-tool:博客园文章快捷发布工具

    此工具解决的痛点是在本地编辑的 Markdown 文件里包含的图片,在博客园发布时,需要手动一张张的复制到博客园的编辑器中上传,十分麻烦,此文中有详细说明: 二.安装工具 (1)具有 .NET Core/.NET 5 环境可以直接...

    微信小程序-小程序商店

    支持metaWeblog Api(支持windows live writer等离线博客编写) WordPress站点xml文件导入功能(支持文章、附件及标签) 文章标签tag功能、私密文章支持、文章归档 文章markdown/富文本编辑支持、快速编辑 响应式布局...

    myPersimmon:基于Laravel 5.4的开发的博客系统,代号:myPersimmon

    接口地址: : ,可以方便的使用离线发布工具写博客,就像我就喜欢使用Mweb写博客,然后通过Metaweblog API发布。更多功能欢迎大家自己挖掘,或者有好的意见和建议欢迎拍砖。项目概述项目名称:我的柿子项目运行地址...

    MWeb3-ProMarkdownwriting,notetakingandstaticbloggeneratorApp.dmg mweb: 3.3.8静态博客

    Markdown辅助:支持屏幕截图以及粘贴,复制和粘贴,拖放插入图像并将其直接显示在编辑器中。与Markdown语法兼容时,支持设置图像宽度。有用的表格插入和LaTeX书写辅助工具。 Markdown输出:导出为图像,HTML,Epub...

    iBlog-开源

    OSX应用程序,用于在支持metaweblog api XML-RPC(例如bblog)的博客中发布

    metaweblog-demo:元博客演示

    metaweblog-demo 元博客演示

    nodeblog:基于nodejs的博客

    速度支持MetaWeblog API同步支持42qu.com要求 的Ubuntu $ sudo apt-get install mongodbCentOS的# install mongodb# see: http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages节点模块安装$ sudo npm ...

Global site tag (gtag.js) - Google Analytics