ping是基於XML_RPC標準協議的更新通告服務,用於博客把內容更新快速通知給百度,以便百度及時進行抓取和更新。
簡而言之,就是網站新增文章後,能夠自動把新文章地址馬上通知百度來收錄,是網站SEO優化,原創防止複製的神器。
我用CakePHP 3.0+ 寫了一個這樣一個Baidu Ping 的小部件,簡單,但頗有用。php
phpCakePHP 3.0+ BaiduPing Components: <?php /** * 適用於CakePHP 3.0+ 的百度PING部件。瞭解百度PING http://zhanzhang.baidu.com/tools/ping * 網站發佈文章成功後,調用此部件,及時通知百度收錄。是每一個網站必備工具。 * 使用方法: * Controller: * $this->Baidu = $this->loadComponents('Baidu'); * if($this->Baidu->ping(['posturl'=>'文章地址'])){ * 百度返回收到新文章地址成功 * } * @author macnie * @link http://www.macnie.com 會保持更新 */ namespace App\Controller\Component; use Cake\Controller\Component; use Cake\Utility\Xml; use Cake\Network\Http\Client; class BaiduComponent extends Component { /** * 把SITE_NAME,SITE_URL換成你本身的便可 * @param 必須傳遞 $prams['posturl'] $params * @return bool */ public function ping($params = []){ $url = 'http://ping.baidu.com/ping/RPC2'; $default = [ 'sitename'=>SITE_NAME, 'siteurl'=>SITE_URL, 'posturl'=>'', //此項必傳遞,不然返回ping失敗 'rss'=>SITE_URL.'/rss', ]; $options = array_merge($default,$params);// 組裝數據包 $array = [ 'methodCall'=>[ 'methodName'=>'weblogUpdates.extendedPing', 'params'=>[ 'param'=>[ [ 'value'=>['string'=>$options['sitename'],] ], [ 'value'=>[ 'string'=>$options['siteurl'], ] ], [ 'value'=>[ 'string'=>$options['posturl'], ] ], [ 'value'=>[ 'string'=>$options['rss'], ] ] ] ] ] ]; $xml = Xml::fromArray($array); $xml = $xml->asXML();//建立XML $HttpSocket = new Client(); $res = $HttpSocket->post($url,$xml);// 向百度發送ping的POST請求 $this->log($res); $xmlArray = Xml::toArray(Xml::build($res->body()));//把百度返回值處理成數組 return !$xmlArray['methodResponse']['params']['param']['value']['int'];// 處理接受值。返回1:失敗;0:成功。百度這個設定很彆扭 } }