首先我们先来了解一下什么是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报文地址。