適用於CakePHP 3.0+的百度PING組件 Components

什麼是Baidu Ping 服務

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:成功。百度這個設定很彆扭
    }
}
相關文章
相關標籤/搜索