Windows Live Writer是一款小巧的写博客的工具,非常方便,甚至网上看到过有的评论称Live Writer是一款最不像微软产品的微软产品。
Writer支持MSN Spaces以及Wordpress之类的很多博客模板,但是如果是自己写的博客系统呢,就像我的游戏版面,因此就如上一篇的RSS功能一样,也需要亲自动手一下了。
XMLRPC协议直白的讲是一个远程通讯用的标准,通讯的双方都使用XML格式来交流,而为了使双方的程序都明白数据的内容,需要有一个格式的约束,这个约束就是XMLRPC标准。
XMLRPC 有很多应用的领域,其中之一便是Blogger API,Blogger API是遵守XMLRPC协议的一种用来进行博客写作的应用程序接口,而MetaWeblog API同样是这样一组应用程序接口,当然,对Blogger API在功能上进行了一定的扩充。
http://www.xmlrpc.com/ 这里是XMLRPC的官网,关于Blogger API和MetaWeblog API的详细内容也都可以在这里完整的查到。
Live Writer作为博客写作的客户端,支持很多种用于博客写作的API接口,今天我的方法便是使用MetaWeblog API来实现的。
Writer 和博客之间整个的工作流程很简单,每当Writer发出工作请求的时候,会发出一个XML格式的消息,当博客程序接收到消息后,进行处理(用户编写),然后再返回一个XML格式的消息,告知客户端工作进行的怎么样,就这么简单,我们要做的工作就是正确的分析客户端发来的XML消息,然后进行相应的数据库处理,最后再返回一个正确的XML消息。
那么首先,需要有XML解析的功能,还要保证符合XMLRPC协议,这可是个工程量浩大的活儿,网上有很多已经封装好的库可以使用,也可以在XMLRPC给出的Library基础上编写,可以事半功倍,我用的是一个应该是爱好者吧,自己用PHP编写的XML-RPC Library(http://keithdevens.com/software/xmlrpc)
MetaWeblog 一共有6个接口,分别是:

metaWeblog.newPost (blogid, username, password, struct, publish)
metaWeblog.editPost (postid, username, password, struct, publish)
metaWeblog.getPost (postid, username, password)
metaWeblog.newMediaObject (blogid, username, password, struct)
metaWeblog.getCategories (blogid, username, password)
metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts)

更多接口信息请查看msdn http://blogs.msdn.com/metablog.ashx
函数的用途正如其名,很好理解,上面三个函数是必须实现的,下面的三个是可选的,另外还有一个必须实现的函数是blogger.getUsersBlogs,这个是原属于Blogger API的。关于细节包括参数,返回值的要求,大家参看官网(http://www.xmlrpc.com/metaWeblogApi),不难理解,这里不再赘述了。
后面的工作就是正确的分析消息然后进行相应的操作就行,有点不太好讲清楚,所以我还是把源代码给出,里面写了详细的注释,相信能一目了然的。
MetaWeblogAPI.php
另外要注意的是一定要保证返回的XML消息格式的正确,如果程序总是出错,大家可以用echo来debug。
例子中metaWeblog.newMediaObject我没有来得及实现,所以贴图要使用FTP来实现,Writer中可以进行设置,还有在 Writer建立账户过程中如果提示下载样式的话,就不要下载了,好像在字符上会有些问题,目前没有做任何处理,呵呵,很基本的实现。
在最后给出一个blogger.getUsersBlogs函数客户端发来消息以及返回值的一个正确的格式,以供参考:

客户端消息:

POST /api/RPC2 HTTP/1.0
User-Agent: Java.Net Wa-Wa 2.0
Host: plant.blogger.com
Content-Type: text/xml
Content-length: 515

<?xml version="1.0"?>
<methodCall>
<methodName>blogger.getUsersBlogs</methodName>
<params>
<param>
<value><string>C6CE3FFB3174106584CBB250C0B0519BF4E294</string></value>
</param>
<param><value><string>ewilliams</string></value></param>
<param><value><string>secret</string></value></param>
</params>
</methodCall>

返回值:
HTTP/1.1 200 OK

Connection: close

Content-Length: 125

Content-Type: text/xml

Date: Mon, 6 Aug 20001 19:55:08 GMT

Server: Java.Net Wa-Wa/Linux

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>url</name>
<value>http://www.ownself.org/game</value>
</member> 0; <member>
<name>blogid</name>
<value>5467</value>
</member>
<member>
<name>blogName</name>
<value>OWNSELF Game</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>

利用MetaWeblog API实现XMLRPC写博客功能的更多相关文章

  1. [PHP]利用MetaWeblog API实现XMLRPC功能

    [PHP]利用MetaWeblog API实现XMLRPC功能 | OWNSELF [PHP]利用MetaWeblog API实现XMLRPC功能 Windows Live Writer是一款小巧的写 ...

  2. 利用border和伪类画出三角形 ps:好久没写博客了。。。

    有一个半月没有写博客了,这段时间,小哥我经历了自入行前端最为黑暗的时期,迷茫,空虚,不想写代码,不想做研究了.连打游戏都没有兴趣,如同行尸走肉一般.还好,毕业论文的初稿完成后,整个时间段最恶心最难熬的 ...

  3. 利用Word发布文章到cnblogs博客

    利用Word发布文章到cnblogs博客 用博客园cnblogs:http://www.cnblogs.com/博客名称/services/metablogapi.aspx,word老是提醒" ...

  4. 愉快地使用Open Live Writer写博客

    想要坚持写博客的习惯,却又无法忍受网页编辑器的各种不方便?open live writer是一个不错的选择.对我来说最有诱惑的就是能够快速的黏贴图片.代码.使用过程遇到不少坑,最坑的就是不能使用163 ...

  5. 新功能发布!Markdown写博客!

    有一种神奇的语言,它比html还简单,它巧妙地将内容与格式整合在一起--它就是Markdown. 现在我们实现了博客对Markdown的内置支持,可以让您轻松地在园子里用这个神奇的语言写博客! &qu ...

  6. 使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片

    如今,使用markdown攥写博客已成为主流,而Typora作为markdown的主流工具,广受大众好评,本文讲述从Typora的安装到快速将Typora写好的博文上传到博客园 Typora下载 Ty ...

  7. (转)[BetterExplained]为什么你应该(从现在开始就)写博客

    (一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处.(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极 ...

  8. Orchard用LiveWriter写博客

    本文链接:http://www.cnblogs.com/souther/p/4544241.html Orchard本身提供一个内建的管理面板来写博客,许多人更喜欢采用客户端提交的方式,例如Windo ...

  9. 象写程序一样写博客:搭建基于github的博客

    象写程序一样写博客:搭建基于github的博客   前言 github 真是无所不能.其 Pages 功能 支持上传 html,并且在页面中显示.于是有好事者做了一个基于 github 的博客管理工具 ...

随机推荐

  1. jquery 仿百度搜索下拉框的插件

    转载地址:http://www.open-open.com/lib/view/open1420624048437.html 今天写了个下拉插件分享出来 效果: , 可以搜素,也可以使用上下键选择匹配出 ...

  2. Error:“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”

    我的电脑是 win7 64bit,用 VS2012 跑网上下载的程序,Realease | x64 模式下出现该错误. 问题出在 freeglut.dll 是 32bit 下的 dll,需要换成 64 ...

  3. C++重载覆盖隐藏

    写一个程序,各写出重载覆盖 1 // // main.cpp // 2013-7-17作业2 // // Created by 丁小未 on 13-7-17. // Copyright (c) 201 ...

  4. Sypder上手

    准备用python来做数据分析,选择了Sypder 刚打开时有点蒙逼,工作目录直接就在C盘了,想切换一下,发现右边工具栏里有工程路径,发现原来默认是在c盘用户路径下创建了一个临时工程 于是直接菜单栏/ ...

  5. 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)

    题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...

  6. RMI的概念

    RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来 ...

  7. AndroidTips:解决Dialog全屏显示以及Dialog显示自动弹出输入法

    继承实现一个dialog,并在onCreate里面做处理. @Override  protected void onCreate(Bundle savedInstanceState) {      s ...

  8. SU unisam命令学习

  9. express-18 路由

    简介 路由是网站或Web服务中最重要的一个方面:路由是将请求(由URL和HTTP方法指定)路由到处理它们的代码去的一种机制. 路由过去是基于文件的,这很简单,但不灵活. IA 是指内容的概念性组织.在 ...

  10. js兼容方法:通过样式名获取元素,byClass

    function byClass(oParent,className){ if(document.getElementsByClassName){ //if it is Firefox return ...