导航

yaosansi's Blog

当你背向太阳的时候,你只会看到自己的阴影!能力是有限的,努力无限的!

« Mono 2更新IE7复制粘贴时,总出现提示信息的解决办法。 »

在Asp.Net中创建MetaWeblog API

  • 本站大部分内容从网上收集,收集目的仅供研究、学习。涉及版权或不希望收录您的文章请您及时与我联系。
  • 本站IM群,请自行选择。请各位朋友按照自己喜好加入。加入群后请及时发言,防止被清理。谢谢您的合作!!!
  • QQ群:Y①WEB开发(ASP.NET)号码:7351660 QQ群:Y②WEB开发(ASP+.NET)号码:11864905
  • QQ群:Y③WEB开发(DIV+CSS)号码:16610506 QQ群:Y④WEB开发(JS+AJAX)号码:16143998
  • QQ群:Y⑤WEB开发(新手)号码:12777715 MSN群:yaosansi[at]126.com

原文:http://www.cnblogs.com/jaic-xiao/archive/2008/08/02/zai_asp_net_zhong_chuang_jian_metaweblog_api.html

毫无疑问MetaWeblog API是一个非常有益和受欢迎的发明,只为博客和其他网站的一些一般服务。

 

概念

   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,  然后添加引用到项目中。。

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

app_img3

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

下载[ 62KB ]

原创文章如转载,请注明:转载自http://www.yaosansi.com
订阅本站,阅读更多文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2005-2008 yaosansi'site All Rights Reserved.

感谢Denny·G 为本站提供FTP空间
辽ICP备05021434号

Search

  •  

赞助商广告

控制面板

最新评论及回复

最近发表