1 Ping服务

近来,使用Baidu站长工具,发现有一个ping服务ping 是基于 XML_RPC 标准协议的更新通告服务,用于Blog把内容更新快速通知给搜索引擎,以便搜索引擎及时进行抓取和更新。

介绍页面上的使用方法有两种,手动和自动。手动过于麻烦,不在考虑范围之内。而自动则需要Blog后台程序处理,因为我的Blog是使用Jekyll生成的静态站点,没有后台,思来想去,只好用自己最熟悉的python写个ping请求程序了。

2 XMLRPC

上文提到过, ping 是使用 XMLRPC 协议进行的,因此先来介绍下这个协议。

XMLRPC 是使用 HTTP 协议作为传输协议的 RPC 机制,采用 XML 文本进行通信。

RPC 就是 Remote Procedure Call ,在本地机器上远程调用远端机器上的一个过程的技术。以百度为例子,百度作为 RPC Server ,用于响应 RPC Client 的请求,执行方法,并回送执行结果; 我的本地计算机就相当于 RPC Client ,用于向 RPC Server 发起请求,并接受方法的执行结果。

3 Python实现

Python 内置了 XMLRPClib ,可以很方便地处理XMLRPC协议,免去了封包解包的麻烦。

用法很简单,首先导入库:

import xmlrpclib

生成xmlrpc服务器对象:

sever = xmlrpclib.ServerProxy(ServerProxy)

其中 ServerProxy 是搜索引擎的RPC服务器端点地址。

然后便可以执行RPC服务器的方法了,以百度为例:

result = server.weblogUpdates.extendedPing(blog_name,index_addr,new_post_addr,rss_addr)

weblogUpdates.extendedPing 是需要执行的方法,其中括号中的四个参数是 百度ping服务页面 上所要求的。 result 是方法返回的执行结果。

我的完整代码在_baidu-ping-xmlrpc.py 。py脚本名字前面加下划线可以防止 Jekyll 把它加进静态站点中。

在把文章Push到 Github 上后,便可执行py脚本,向搜索引擎发送 ping 请求了。

comments powered by Disqus