如沐博客-互联网观察者

致力于互联网产业的发展

« 未来用户入口端TOP 10大盘点:被互联网改写的16个传统行业 »

Google & 百度搜索引擎ping服务实现

采集站需要的是三点:

1.采集速度,能否保证原创出现10s内,将这个内容采集到自己的网站上?

2.SEO,在不影响阅读,不影响内容正确性的前提下适度伪原创;keyword,description等。

3.大量数据,采集大量数据,数据库优化要做好。

4.ping服务

今天研究了一下ping服务,自己理解的话就是通过站长的主动请求,更快的加速内容被抓取,而不再是被动的去等待蜘蛛去抓取。

一般的站长平台都会提供ping服务,包括api和web界面上的ping服务,针对于采集站来说,显然不可能使用手工的方式去发送ping请求。

下面转载的是来自百度站长平台对于ping服务的描述:


什么是ping服务

ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新。

Ping服务使用方法

你可以采取手动通知和自动通知两种方式使用ping服务:
手动ping:访问http://ping.baidu.com/ping.html页面,在输入框中输入博客地址或者feed地址,点击“提交博客”按钮即可。
自动ping:如果您的博客程序支持自动ping功能,您只需把百度的Ping服务地址配置到你的Blog发布后台或者客户端程序中,就可以实现自动通知的功能。百度ping服务的地址为:http://ping.baidu.com/ping/RPC2

自动Ping的XML_RPC

发送给百度Ping服务的XML-RPC客户请求需要包含如下元素:
RPC端点: http://ping.baidu.com/ping/RPC2
调用方法名: weblogUpdates.extendedPing
参数: (应按照如下所列的相同顺序传送)
博客名称
博客首页地址
新发文章地址
博客rss地址

Ping请求包的例子

weblogUpdates.extendedPing xml-rpc请求举例:
 

POST /ping/RPC2 HTTP/1.0
User-Agent: request
Host: ping.baidu.com
Content-Type: text/xml
Content-Length: 511
<?xml version="1.0" encoding="UTF-8"?><methodCall>
   <methodName>weblogUpdates.extendedPing</methodName>
   <params>
       <param>
           <value><string>百度的空间</string></value>
       </param>
       <param>
           <value><string>http://hi.baidu.com/baidu/</string></value>
       </param>
       <param>
           <value><string>http://baidu.com/blog/example.html</string></value>
       </param>
       <param>
           <value><string>http://hi.baidu.com/baidu/rss</string></value>
       </param>
   </params>
</methodCall>
ping-service响应举例: 
ping-service对非POST方法请求返回HTTP_METHOD_NOT_ALLOWED(405)错误代码
对超大错误包返回HTTP_REQUEST_ENTITY_TOO_LARGE(413)错误代码
对非“text/xml”请求包返回HTTP_UNSUPPORTED_MEDIA_TYPE(415)错误代码
其他情况返回HTTP_OK(200)代码
xml-rpc响应http包体为一个xml文档,含有一个int值,0表示推送成功,其他值表示推送失败,目前只有0和1。
推送成功时的服务器响应包为:
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 11:54:53 GMT
Content-Length: 156
Connection: close
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?><methodResponse>
   <params>
       <param>
           <value>
               <int>0</int>
           </value>
       </param>
   </params>
</methodResponse>
推送失败时的服务器响应包为:
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 11:54:53 GMT
Content-Length: 156
Connection: close
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?><methodResponse>
   <params>
       <param>
           <value>
               <int>1</int>
           </value>
       </param>
   </params>
</methodResponse>
 


下面的代码是使用php实现google和百度的ping请求方法。(代码部分参考osc)

<?phprnrn/**rn  +------------------------------------------------------------------------------rn * 通知搜索引擎过来抓去最新发布的内容。秒收不是梦rn * 目前仅支持Google和Baidurn  +------------------------------------------------------------------------------rn */rnclass Ping {rnrn    public $method, $callback;rnrn    public function __construct($site_name, $site_url, $update_url, $update_rss) {rn        $this->method = "rn            <?xml version=\"1.0\" encoding=\"UTF-8\"?>rn            <methodCall>rn                <methodName>weblogUpdates.extendedPing</methodName>rn                <params>rn                    <param><value><string>{$site_name}</string></value></param>rn                    <param><value><string>{$site_url}</string></value></param>rn                    <param><value><string>{$update_url}</string></value></param>rn                    <param><value><string>{$update_rss}</string></value></param>rn                </params>rn            </methodCall>";rn    }rnrn    private function _post($url, $postvar) {rn        $ch = curl_init();rn        $headers = array(rn            "POST " . $url . " HTTP/1.0",rn            "Content-type: text/xml;charset=\"utf-8\"",rn            "Accept: text/xml",rn            "Content-length: " . strlen($postvar)rn        );rn        curl_setopt($ch, CURLOPT_URL, $url);rn        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);rn        curl_setopt($ch, CURLOPT_POST, 1);rn        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);rn        curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar);rn        $res = curl_exec($ch);rn        curl_close($ch);rn        return $res;rn    }rnrn    public function google() {rn        $this->callback = $this->_post('http://blogsearch.google.com/ping/RPC2', $this->method);rn        return strpos($this->callback, "<boolean>0</boolean>") ? true : false;rn    }rnrn    public function baidu() {rn        $this->callback = $this->_post('http://ping.baidu.com/ping/RPC2', $this->method);rn        return strpos($this->callback, "<int>0</int>") ? true : false;rn    }rn}rnrn?>

利用上面的代码,每次采集一篇文章之后,再利用Java请求ping服务对这篇文章发出采集请求。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright 2010-2017 25230.NET All Rights Reserved.