Ping服務
ping 是基于 XML_RPC 標準協議的更新通告服務,用于Blog把內容更新快速通知給搜索引擎,以便搜索引擎及時進行抓取和更新。
計算機就相當于 RPC Client ,用于向 RPC Server 發起請求,并接受方法的執行結果。
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 是方法返回的執行結果。
封裝代碼
在ping_all函數里放上需要ping的鏈接就可以了,參數按照需求傳。
#!/usr/bin/env python# -*- coding:utf-8 -*-import jsonimport xmlrpclibfrom db import redisdef ping(ping_url, *args, **kwds): """args: site_name, site_host, post_url, rss_url.""" rpc_server = xmlrpclib.ServerProxy(ping_url) result = rpc_server.weblogUpdates.extendedPing(*args) print resultdef ping_all(*args, **kwds): ping_url_list = [ 'http://ping.baidu.com/ping/RPC2', 'http://rpc.pingomatic.com/', 'http://blogsearch.google.com/ping/RPC2', ] for url in ping_url_list: ping(url, *args, **kwds)def main(): client = redis.pubsub() client.subscribe(['ping']) while True: for item in client.listen(): if item['type'] == 'message': msg = item['data'] if msg: post = json.loads(msg) print post ping_all(post.get('site_name'), post.get('site_host'), post.get('post_url'), post.get('rss_url'))def test(): site_name = "tech2ipo" site_host = "http://alpha.tech2ipo.com" post_url = 'http://alpha.tech2ipo.com/100855' rss_url = "http://alpha.tech2ipo.com/rss/alpha.tech2ipo.com" ping_all(site_name, site_host, post_url, rss_url)if __name__ == '__main__': main()總結
以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流。
新聞熱點
疑難解答
圖片精選