Posts Tagged ‘WordPress

Pingback和Xml-RPC

In: WEB后端  

14 03 2011

WordPress有一个功能:当有人引用本站文章时,会添加一条评论在文后,显示引用页面的信息;发博客时WordPress也会通知文章内每个链接,让它知道自己被引用了。这个功能非常赞,让博客间的互动变得更容易。

改用自己的博客系统后,还想用这么高级的功能,只有靠自己了。搜索得知,这个功能叫Pingback,是基于XML-RPC的一个协议。Pingback功能需要实现一个xmlprc client,在文章更新时ping对方服务;以及一个xmlrpc server,来接受其它服务器发过来的ping。

先研究下XML-RPC协议,走http用xml来交换数据,跟SOAP很像,但比SOAP简单的多。Python里有现成的库可以方便的处理xmlrpc。

来尝试下写个xmlrpc客户端:

from xmlrpclib import ServerProxy
from pprint import pprint

s = ServerProxy('http://www.aoao.org.cn/xmlrpc.php')
pprint(s.system.listMethods())

这段代码运行完,输出了aoao同学提供的好多方法。那些metaWeblog、blogger、wt、wp开头的都是跟博客管理有关的,调用时需要传帐号密码,就先不玩了。试下addTwoNumbers和sayHello,看名字应该可以玩:

>>> s.demo.addTwoNumbers(1, 2)
3
>>> s.system.multicall([{'methodName':'demo.addTwoNumbers','params':[1,2]},{'met
hodName':'demo.sayHello','params':[]}])
[[3], ['Hello!']]

果然成功了。看起来跟本地函数一样的调用形式,xmlrpclib却在后台把输入参数拼装成xml,post给远端服务,再拿到返回的xml数据解析出返回值。也支持多个方法批量调用,真是太赞了~

回过头来看Pingback协议,更新文章时怎么通知他人就有思路了:

  • 先找出文章中所有链接,还要找出链接对应的xmlrpc(pingback) server;
  • 调用该server的pingback.ping方法,把本文链接和对方链接作为参数传过去;
  • 处理返回状态,记录下这次pingback的信息,这是为了避免更新文章时多次ping。

官方文章中提供了两种方案从一个链接找到对应的xmlrpc server:

  • 查找该链接response header里的X-Pingback字段;
  • 查找该链接页面里的<link rel="pingback" href="pingback server">标记。

Read the rest of this entry »

关于我

JerryQu,当前从事前端开发,@中国北京
这里是我随便记录东西的地方~
需要找我,我的联系方式在这里»
查找QGYWebIM相关信息,请点这里»

  • PPanda sftp如何同步本地文件夹呢?
  • dron 嗯!太有用了,终于完美找回 EditPlus 的感觉了。
  • 袁源 还真的是这样。其实挺佩服微软的呀~就是都太不完善了
  • 三水清 类似功能可以使用fiddler,http://ming.sinaapp.com/?p=218
  • 呆呆 非常感谢~话说我现在想把weinre变成一个服务器,就是我在电脑上修改了,手机上访问可以直接,不知道[...]
  • 困扰了我好几天的问题,不过最后还是让我解决了,要早让我看见这个文章该多好啊,那我也不用烦恼那么久了~[...]
  • hoowolf 非常感谢你的工作!!!
  • welefen 恩,去年我们在新首页导航精准下线的时候也遇到过,当时还做了对用户影响的数据评估和分析。
  • 唠叨下 我们这边测试的时候是在刚做完 preload 后的系统上测试的,就跟刚装完操作系统后一样干净。怎么说[...]
  • gust 我是在ubuntu11.10环境下
  • gust 想用google浏览器的话可以这样 webbrowser.get('/usr/bin/google[...]
  • jin 怎么zenCoding的缩写设置呢,类似editplus下的acp配置
  • Jerry Qu @Feather,确实Shadow是基于Weinre封装的。在我这里也很慢,因为它连的是http:/[...]
  • Feather 谢谢分享,其实Adobe的Shadow产品貌似也是用这个原理来做的,不过shadow封装好,比较方便[...]
  • i am bug 感谢屈屈!