首先我们先来了解一下什么是Ping服务。ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给搜索引擎,以便搜索引擎及时进行抓取和更新。
上一篇文章我就是写的rss格式报文的相关材料,现在这篇教程需要结合这篇报文来实现推送消息的目的。
自动Ping的XML_RPC格式规定如下:
发送给搜索引擎Ping服务的XML-RPC客户请求需要包含如下元素:
RPC端点: 每个搜索引擎都不同,百度的是http://ping.baidu.com/ping/RPC2
调用方法名: weblogUpdates.extendedPing
参数: (应按照如下所列的相同顺序传送)
博客名称
博客首页地址
新发文章地址
博客rss地址
下面这段是百度收到的ping提交报文案例
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 weblogUpdates.extendedPing 百度的空间 http://hi.baidu.com/baidu/ http://baidu.com/blog/example.html http://hi.baidu.com/baidu/rss
大家可以看到,提交方式是post提交,useragent,host等都是有严格的规定的。
下面我使用curl函数来实现向某个特定的链接发送ping提交。
function pingsubmit ( $host, $url , $link, $blogname, $blogurl, $blogrssaddr) {
$httpheader = array (
"POST ".$url." HTTP/1.0",
"User-Agent: request",
"Host: ".$host,
"Content-Type: text/xml"
);
$post_string = 'weblogUpdates.extendedPing'.$blogname.''.$blogurl.'/'.$link.''.$blogrssaddr.'';
$options = array(
CURLOPT_URL => "http://".$host.$url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post_string,
CURLOPT_HTTPHEADER => $httpheader
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
if(strstr($result, '0') == null) {
return false;
}
return true;
}其中$host是ping提交地址的域名,$url是ping提交地址的参数部分,$link是您要提交的新博文地址,$blogname是您的博客名字,$blogurl是您提交的博客的域名,$blogrssaddr是您提交的博客的rss报文地址。