[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,博客园,简书上开通了账号并且把博客里的一些可以发布的文 ...
随机推荐
- C语言,C++,static
术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避 ...
- transition与animation
以前,一直都知道,transition是animation的一个简化版,甚至不算是动画,而是一种过渡. transition的用法 早两天用transition写了一个按钮滑动的效果,类似于IOS的设 ...
- Python 中的类的相关操作
构造函数 构造函数是任何类都有的特殊方法.当要创建一个类时,就要调用构造函数.他的名字是__init__.init的前后分别是两个下划线.时间类Time的构造函数如下: >>> cl ...
- webform中几个常用的控件
一,简单控件 1,Lable——标签:在网页中呈现出来的时候会变成span标签 属性:Text——标签上的文字 BackColor,ForeColor——背景色,前景色 Font——字体 Bold- ...
- SSH2三大框架整合出错(四)
<%@taglib prefix="c" uri="http://java.sun.com/jsf/core" %> usage: java org ...
- 三篇IMO的文章
http://column.iresearch.cn/b/201411/687499.shtml?from=singlemessage&isappinstalled=1 http://colu ...
- Jsp中使用数据库连接池.
原文 Jsp中使用数据库连接池. 1. 在tomcat服务器目录下面的conf中找到一个叫Context.xml的配置文件,在其中加入以下代码 <Resource name="jdbc ...
- 百度地图js版定位控件
一 概述 百度地图在最新版已加入浏览器定位控件,个人认为应该是既高德地图更新了一个浏览器也能定位功能后,百度不甘落后自己简简单单,草草写了个这个功能的定位控件 GeolocationControl 这 ...
- Linux网络基础配置
这是看itercast视频的笔记 Linux网络基础配置 以太网连接 在Linux中,以太网接口被命令为:eth0, eth1等, 0,1代表网卡编号 通过lspci命令可以查看网上硬件信息(如果是u ...
- Swift - 各种手势检测大全(UIGestureRecognizer及其子类)
UIGestureRecognizer有许多子类,用于监听一些常见的手势事件,这些子类主要有: 1,UISwipeGestureRecognizer:滑动(快速移动) 1 2 3 4 5 6 7 8 ...