什么是Baidu Ping 服务

ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新。
简而言之,就是网站新增文章后,可以自动把新文章地址立刻通知百度来收录,是网站SEO优化,原创防止复制的神器。
我用CakePHP 3.0+ 写了一个这样一个Baidu Ping 的小部件,简单,但很有用。

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:成功。百度这个设定很别扭
    }
}

已注销
42 声望0 粉丝

引用和评论

0 条评论