• 欢迎访问小杰博客网站
  • 欢迎访问小杰博客网站哦

【新站长须知】利用Ping服务通知搜索引擎博客更新的原理与代码实现,让搜索引擎快速收录

未分类 小杰 4年前 (2014-12-24) 143次浏览 未收录 0个评论

什么是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~

需要说的是百度的ping和谷歌的提交格式是不同的,下面简单的说说,分别给百度和谷歌做个介绍,首先介绍的是谷歌

【*1】谷歌的ping服务的php的实现

关于RPC的详细介绍可以移步维基百科,谷歌ping服务的标准:

RPC端点: http://blogsearch.google.com/ping/RPC2
调用方法名: weblogUpdates.extendedPing
参数: (应按照如下所列的相同顺序传送)

  • 站点名
  • 站点URL
  • 需要检查更新的页面URL
  • 相应的RSS、RDF或Atom种子的URL
  • 可选:页面内容的分类名称(或标签)。您可以指定多个值,之间用’|’字符进行分隔。

首先要写一个CURL的函数,来POST谷歌的RPC端点:

function postUrl($url, $postvar) {
$ch = curl_init();
$headers = array(
“POST “.$url.” HTTP/1.0″,
“Content-type: text/xml;charset=\”utf-8\””,
“Accept: text/xml”,
“Content-length: “.strlen($postvar)
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar);
$res = curl_exec ($ch);
curl_close ($ch);
return $res;
}

主要的curl写好了之后,剩下就是要根据谷歌的XML-RPC标准组装发送的数据了,详细的请求例子可以参考官方案例,网址:http://www.google.com/intl/zh-CN/help/blogsearch/pinging_API.html

例如我的代码是这样写的:

$googleXML = <<<END
<?xml version=”1.0″?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param>
<value>Ping服务的php实现方法,让网站快速被收录</value>
</param>
<param>
<value>http://blog.sn77.cn</value>
</param>
<param>
<value>http://blog.sn77.cn/archives/47.html</value>
</param>
<param>
<value>http://blog.sn77.cn/feed</value>
</param>
</params>
</methodCall>
END;
$res = postUrl(‘http://blogsearch.google.com/ping/RPC2′, $googleXML);
//下面是返回成功与否的判断(根据谷歌ping的接口说明)
if (strpos($res, “<boolean>0</boolean>”))
echo “PING成功”;
else
echo “PING失败”;

OK,这个就可以简单的实现谷歌的PING服务了。可以根据代码自行修改实现这个功能。

【*2】百度的ping服务的php的实现

百度的ping服务xml代码是跟谷歌不同的,百度总是会有自己的特点:

介绍下百度博客ping服务,百度博客Ping服务的详细介绍,请移步:http://www.baidu.com/search/blogsearch_help.html#n7

百度的ping服务也是基于XML-RPC标准协议,但是与谷歌ping服务不同的是百度的ping发送的xml格式不同,我们需要使用string节点包裹内容。

例如:

<?xml version=”1.0″ encoding=”UTF-8″?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param>
<value><string>Ping服务的php实现方法,让网站快速被收录</string></value>
</param>
<param>
<value><string>http://blog.sn77.cn/</string></value>
</param>
<param>
<value><string>http://blog.sn77.cn/archives/47.html</string></value>
</param>
<param>
<value><string>http://blog.sn77.cn/feed</string></value>
</param>
</params>
</methodCall>

根据上面提到的谷歌接口,我们只要改变一下提交的xml内容即可,当然百度ping服务返回的判断也是跟谷歌的不同,也可以做相应的修改,

下面是php的代码:

$baiduXML = <<<EOT
<?xml version=”1.0″ encoding=”UTF-8″?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param><value><string>Ping服务的php实现方法,让网站快速被收录</string></value></param>
<param><value><string>http://blog.sn77.cn</string></value></param>
<param><value><string>http://blog.sn77.cn/archives/47.html</string></value></param>
<param><value><string>http://blog.sn77.cn/feed</string></value></param>
</params>
</methodCall>
EOT;
$res = postUrl(‘http://ping.baidu.com/ping/RPC2′, $baiduXML);
//下面是返回成功与否的判断(根据百度ping的接口说明)
if (strpos($res, ”<int>0</int>”))
echo ”PING成功”;
else
echo ”PING失败”;

上面的代码就可以实现php的ping服务了。

下面再给各位看管提供一个百度的ping服务代码

<?php
function postUrl($url, $postvar)
{
$ch = curl_init();
$headers = array(
“POST “.$url.” HTTP/1.0″,
“Content-type: text/xml; charset=\”gb2312\””,
“Accept: text/xml”,
“Content-length: “.strlen($postvar)
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar);
$res = curl_exec ($ch);
curl_close ($ch);
return $res;
}

$baiduXML = “<?xml version=\”1.0\” encoding=\”gb2312\”?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param><value><string>网站名称</string></value></param>
<param><value><string>http://www.***.com</string></value></param>
<param><value><string>http://www.***.com/a/15222.html</string></value></param>
<param><value><string>http://www.***.com</string></value></param>
</params>
</methodCall>”;
$res = postUrl(‘http://ping.baidu.com/ping/RPC2′, $baiduXML);

if ( strpos($res, “<int>0</int>”) )
{
echo “PING成功”;
}
else
{
echo “PING失败”;
}
?>


小杰博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【新站长须知】利用Ping服务通知搜索引擎博客更新的原理与代码实现,让搜索引擎快速收录
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址