metaweblog php,.NET_在Asp.Net中创建MetaWeblog API, 概念   metaweblog是基于XML - phpStudy...

在Asp.Net中创建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"。

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 categoryInfos = new List();

// 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 posts = new List();

// 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 infoList = new List();

// 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

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

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

本文作者:相关阅读:

确认是否关闭浏览器或转到其它页面(javascript)(做聊天室或在线人数的时候可以用上)

小技巧:用批处理对MySQL进行数据操作

ecshop伪静态后产品列表页切换显示方式无法打开页面的解决问题

拿到肉鸡后一些关闭防火墙的命令集合

跨服务器查询导入数据的sql语句

JS CSS制作饱含热情的镶边文字闪烁特效

Ghost XP SP3电脑市场专业装机版 V5.5

基于Jquery的简单&简陋Tabs插件代码

linux系统如何释放内存

在PHP中使用Sockets:从Usenet中获取文件

非虚拟环境让Windwos飞速运行Linux程序

备份和恢复Windows IIS服务器设置

模仿OSO的论坛(五)

配置IP地址的批处理代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值