[SEO]利用Ping服务通知搜索引擎博客更新的原理与代码实现

什么是Ping服务

Ping服务是基于XML_RPC标准协议的更新通告服务,当博客内容发生更新时,可以向搜索引擎发出通知,而搜索引擎接收到通知后将派出蜘蛛对博客进行更新或收录。

如何Ping服务

Ping服务的使用方式有两种,一种是利用搜索引擎的博客提交页面进行提交,第二种是使用博客程序中的Ping功能,如WordPress自带的更新服务(设置-撰写-更新服务),或者 Typecho Ping插件 。具体的提交地址请参考 《[SEO]在线Ping服务地址与RPC服务地址集合》

Ping请求包的例子

 
 
  1. POST /ping/RPC2 HTTP/1.0
  2. User-Agent: request
  3. Host: ping.baidu.com
  4. Content-Type: text/xml
  5. Content-Length: 511
  6. <?xml version="1.0" encoding="UTF-8"?>
  7. <methodCall>
  8.         <methodName>weblogUpdates.extendedPing</methodName>
  9.         <params>
  10.                 <param>
  11.                         <value>博客名称</value>
  12.                 </param>
  13.                 <param>
  14.                         <value>博客地址</value>
  15.                 </param>
  16.                 <param>
  17.                         <value>文章地址</value>
  18.                 </param>
  19.                 <param>
  20.                         <value>RSS地址</value>
  21.                 </param>
  22.         </params>
  23. </methodCall>
需要说明的一点是百度的规范比较奇葩,数据需要以<string>标签包裹:
 
 
  1. POST /ping/RPC2 HTTP/1.0
  2. User-Agent: request
  3. Host: ping.baidu.com
  4. Content-Type: text/xml
  5. Content-Length: 511
  6. <?xml version="1.0" encoding="UTF-8"?>
  7. <methodCall>
  8.         <methodName>weblogUpdates.extendedPing</methodName>
  9.         <params>
  10.                 <param>
  11.                         <value><string>博客名称</string></value>
  12.                 </param>
  13.                 <param>
  14.                         <value><string>博客地址</string></value>
  15.                 </param>
  16.                 <param>
  17.                         <value><string>文章地址</string></value>
  18.                 </param>
  19.                 <param>
  20.                         <value><string>RSS地址</string></value>
  21.                 </param>
  22.         </params>
  23. </methodCall>
可以看出,请求方式应为POST,而各个搜索引擎的返回形式不尽相同,但均是以0表示推送成功,1表示失败。

以百度为例子:

推送成功时的服务器响应包为:

 
 
  1. HTTP/1.1 200 OK
  2. Date: Mon, 11 May 2009 11:54:53 GMT
  3. Content-Length: 156
  4. Connection: close
  5. Content-Type: text/xml
  6. <?xml version="1.0" encoding="UTF-8"?><methodResponse>
  7.         <params>
  8.                 <param>
  9.                         <value>
  10.                                 <int>0</int>
  11.                         </value>
  12.                 </param>
  13.         </params>
  14. </methodResponse>
推送失败时的服务器响应包为:
 
 
  1. HTTP/1.1 200 OK
  2. Date: Mon, 11 May 2009 11:54:53 GMT
  3. Content-Length: 156
  4. Connection: close
  5. Content-Type: text/xml
  6. <?xml version="1.0" encoding="UTF-8"?><methodResponse>
  7.         <params>
  8.                 <param>
  9.                         <value>
  10.                                 <int>1</int>
  11.                         </value>
  12.                 </param>
  13.         </params>
  14. </methodResponse>
具体可参考 百度Ping服务帮助 谷歌Ping服务帮助

代码实现

原理很简单,使用PHP的cURL进行POST推送:
 
 
  1. <?php
  2. function ping($server, $xml) {
  3.         $ch = curl_init();
  4.         $headers = array(
  5.                 "Content-type: text/xml;charset=\"utf-8\"",
  6.                 "Accept: text/xml"
  7.         );
  8.         curl_setopt_array(
  9.                 $ch,
  10.                 array(
  11.                         CURLOPT_URL => $server,
  12.                         CURLOPT_RETURNTRANSFER => true,
  13.                         CURLOPT_POST => true,
  14.                         CURLOPT_HTTPHEADER => $headers,
  15.                         CURLOPT_POSTFIELDS => $xml
  16.                 )
  17.         );
  18.         return curl_exec($ch);
  19. }
  20. $xml = '<?xml version="1.0" encoding="UTF-8"?>
  21. <methodCall>
  22. <methodName>weblogUpdates.extendedPing</methodName>
  23. <params>
  24. <param><value>博客名称</value></param>
  25. <param><value>博客地址</value></param>
  26. <param><value>文章地址</value></param>
  27. <param><value>RSS地址</value></param>
  28. </params>
  29. </methodCall>';
  30. $res = ping('http://blogsearch.google.com/ping/RPC2', $xml);
  31. echo $res;
  32. ?>

若返回0,则说明推送成功。

具体的拓展与应用蓝飞在这里就不再赘述了,留给大家自由发挥吧O(∩_∩)O~



=======================签 名 档=======================

原文地址(我的博客):http://www.clanfei.com/2012/08/1641.html
欢迎访问交流,至于我为什么要多弄一个博客,因为我热爱前端,热爱网页,我更希望有一个更加自由、真正属于我自己的小站,或许并不是那么有名气,但至少能够让我为了它而加倍努力。。
=======================签 名 档=======================



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值