[PHP]利用MetaWeblog API实现XMLRPC功能
[PHP]利用MetaWeblog API实现XMLRPC功能 | OWNSELF
[PHP]利用MetaWeblog API实现XMLRPC功能
Windows Live Writer是一款小巧的写博客的工具,非常方便,甚至网上看到过有的评论称Live Writer是一款最不像微软产品的微软产品,呵呵,不管怎么说反正我是非常喜欢。
Writer支持MSN Spaces以及Wordpress之类的很多博客模板,但是如果是自己写的博客系统呢,就像我的游戏版面,因此就如上一篇的RSS功能一样,也需要亲自动手一下了。
非常不幸的是网上的资料非常少,而且全部是英文的,又参看了其他博客模板的XMLRPC功能的源代码,有了一点点的基本了解。
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 API一共有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)
函数的用途正如其名,很好理解,上面三个函数是必须实现的,下面的三个是可选的,另外还有一个必须实现的函数是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>
<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>
[PHP]利用MetaWeblog API实现XMLRPC功能的更多相关文章
- 利用MetaWeblog API实现XMLRPC写博客功能
Windows Live Writer是一款小巧的写博客的工具,非常方便,甚至网上看到过有的评论称Live Writer是一款最不像微软产品的微软产品. Writer支持MSN Spaces以及Wor ...
- 利用MetaWeblog API 自制博客发布小工具
博客园提供了诸多数据接口, 利用这些接口可以很容易的实现博客的发布,修改,删除等 1.需要引用一个DLL:为CookComputing.XmlRpcV2 2.新建一个类,在其中是一些要实现的东西,如: ...
- 利用Metaweblog技术的API接口同步到多个博客网站(详细)
很早就有这个想法:自己有时候会用到多个博客,有些博客在一个网站上写完之后,要同步到其他博客网站,自己只能复制粘贴,感觉特别没意思,复制粘贴的麻木了.一直在想有哪些技术能实现一次写博,多站同步.最近网上 ...
- 利用 Android 系统原生 API 实现分享功能
利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...
- 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内。以及两点间的测距功能
权声明:本文为博主原创文章,未经博主允许不得转载. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内.以及两点间的测距功能. 绘制多边形(蓝色) ...
- 转 MetaWeblog API 编写
如今,许多人都熟悉个人和公司或业界主办的博客.后者明显成为了传统公司和行业网站的下一代新兴产物.博客的内容涉及从简洁的特制产品公告和公共关系到实用且深刻的主题探索,这些主题可能对公司的产品或行业的未来 ...
- MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。
MWeb 1.3.7 版的新功能 增加发布到 Wordpress 等支持 Metaweblog API 的服务,目前经测试过的有: Wordpress 博客.新浪博客.cnblogs.oschina. ...
- 基于Metaweblog API 接口一键发布到国内外主流博客平台
之前的生活 之前一直使用evenote写博客和日志,其实还是挺方便的.但是我一直都希望能够同步到国内的博客和国外的blogspot等主流博客平台.而强大everote只提供了facebook.twit ...
- MetaWebLog API — 一个多平台文章同步的思路
文章选自我的博客:https://blog.ljyngup.com/archives/578.html/ 起因 为了给博客带来流量,我在CSDN,博客园,简书上开通了账号并且把博客里的一些可以发布的文 ...
随机推荐
- jquery 中获取所有选中的checkbox的用法
以往还错误的把$("input[type='checkbox'][checked]") 是正确的用法,奇怪的是:这样用之前确实是好用的,单当我页面中的html内容超过1000行时, ...
- Ultra Office Control 2.0
http://www.ultrashareware.com/Ultra-Office-Control.htm
- Spring MVC 遇到的一点点问题(转)
今天下午下班之前看了看凯歌给的Spring Training的教程的lab篇,我之前有跟着做没有遇到什么问题,但是到了跟Spring MVC integrating的时候,遇到一点点有趣的事情. 这个 ...
- Swift - 使用位运算提取颜色,合并颜色
通常我们可以使用16进制的格式表示RGB颜色,比如0x2f88c0.通过位操作运算,能很方便的将其中的R,G,B颜色各部分分别提取出来.反之,也可以将R,G,B颜色值组合成一个完整的颜色. 1,提取颜 ...
- ASP.NET - 后台获取按钮绑定的值CommandArgument
<asp:LinkButton runat="server" ID="resumelbtn" CommandArgument='<%# Eval(& ...
- 浅谈BFC与应用
什么是BFC BFC(Block formatting context)的中文翻译我们一般叫做块级格式化上下文.它是一个独立渲染的区域,规定了内部如何布局,同时不受外界的影响.我们的根元素本身就是一个 ...
- 进阶: 案例八: Drag and Drop(动态)
1.节点 2.UI 3. 4.方法: METHOD wddomodifyview . DATA: lo_container TYPE REF TO cl_wd_uielement_container, ...
- Boost Thread学习笔记五
多线程编程中还有一个重要的概念:Thread Local Store(TLS,线程局部存储),在boost中,TLS也被称作TSS,Thread Specific Storage.boost::thr ...
- Boost Thread学习笔记二
除了thread,boost种:boost::mutexboost::try_mutexboost::timed_mutexboost::recursive_mutexboost::recursive ...
- poj2418 map 快排水过
/*计算每个单词的百分比按字典序输出*/ #include <cstdio>#include<cstdlib>#include <cstring>#include ...