出处: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, 然后添加引用到项目中。。
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
测试是通过了,具体如何怎么用在博客上我也没做出来,还得研究。值得提醒的是 通过 http://www.xmlrpc.com 下载 的 xml-rpc.net 包包已经包含各个结构,接口和方法的代码,请自行研究。
附件:MetaWeblogSample.zip下载地址:http://file.ddvip.com/2008_10/1224235867_ddvip_8763.zip
分享到:
相关推荐
下载下来,修改run.php 把用户名密码,博客地址改成你自己的。直接执行php run.php即可发布一篇博客到你的博客中。
利用Metaweblog技术的API接口同步到多个博客网站(详细)-附件资源
使用dotnetcore实现metaweblog服务代理,在blog发布前进行预处理,或者发布给多个博客平台
API MetaWeblog, javascript API 以及全部的 SOAP web service API Tracking scripts 管理员可以更改 tracking script. 可运行于所有的主题风格 HTML 首部标签 管理员可以在后台添加自定义的首部 程序文件扩展名 ...
MetaWeblog.Portable是一个可移植类库,可轻松与MetaWeblogAPI进行交互。 如果您仍然被迫使用MetaWeblogAPI,请向我们... 请在GitHub上按照创建一个问题。 Twitter账号 通过在Twitter上关注AdvancedREI 博客 在上阅
支持 MetaWeblog API,可以使用 Live Writer 或者 Word 2007 在本地书写博客 方便的数据备份功能,可以直接把你的备份数据发送到你设定的邮箱 程序自动升级功能,让你不用再为升级博客而要进行大量操作而烦恼 ...
- 支持 Metaweblog API,接口地址:http://example.com/xmlrpc ,支持通过Metaweblog API发布。(我喜欢使用mweb写markdown,直接发布) 更多功能欢迎大家自己挖掘,或者有好的意见和建议欢迎拍砖。 ## 项目概述 ...
MetaWeblog API 该库包含: XML解析器 HTML解析器(Hack Way) JSON解析器 BASE64哈希算法 SHA1哈希算法 HMAC HASH算法 位运算库 “ UTF-8到Unicode”的转换器 安装 将该库中的文件复制到您的.vim目录。 或者,...
Markdown、TinyMCE、KindEditor置顶/相关/随机/站外相关文章文章、页面永久链接文章草稿夹、签名档、更新提示多用户、多语言、多主题、插件MetaWeblog API 安装JDK 环境准备好之后下载最新的 Solo 包解压,进入解压...
支持metaWeblog Api(支持windows live writer等离线博客编写) WordPress站点xml文件导入功能(支持文章、附件及标签) 文章标签tag功能、私密文章支持、文章归档 文章markdown/富文本编辑支持、快速编辑 ...
B3LOG Solo更新说明:0.6.7 •11984 标签导出 feature •11976 目录生成插件 feature •11975 community 皮肤问题 bug skin ...MetaWeblog API 数据备份/恢复 相关阅读 同类推荐:博客系统下载
用其架设博客平台可以拥有博客发布,引用通告、匿名评论和评论审查等博客系统基本功能,此外还可对评论进行管理,任何页面均可做为RSS源输出,并带有一个Web管理面板,支持MetaWebLog API。不过,就现在所知道的情况...
此工具解决的痛点是在本地编辑的 Markdown 文件里包含的图片,在博客园发布时,需要手动一张张的复制到博客园的编辑器中上传,十分麻烦,此文中有详细说明: 二.安装工具 (1)具有 .NET Core/.NET 5 环境可以直接...
支持metaWeblog Api(支持windows live writer等离线博客编写) WordPress站点xml文件导入功能(支持文章、附件及标签) 文章标签tag功能、私密文章支持、文章归档 文章markdown/富文本编辑支持、快速编辑 响应式布局...
接口地址: : ,可以方便的使用离线发布工具写博客,就像我就喜欢使用Mweb写博客,然后通过Metaweblog API发布。更多功能欢迎大家自己挖掘,或者有好的意见和建议欢迎拍砖。项目概述项目名称:我的柿子项目运行地址...
Markdown辅助:支持屏幕截图以及粘贴,复制和粘贴,拖放插入图像并将其直接显示在编辑器中。与Markdown语法兼容时,支持设置图像宽度。有用的表格插入和LaTeX书写辅助工具。 Markdown输出:导出为图像,HTML,Epub...
OSX应用程序,用于在支持metaweblog api XML-RPC(例如bblog)的博客中发布
metaweblog-demo 元博客演示
速度支持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 ...