php实现必应api提交

闲着没事根据百度和必应提供的api接口,写了一个小demo,修改文件内站点地图url、apikey等参数,访问文件即可自动提交站点地图下的链接到必应。使用宝塔面板的用户也可以使用宝塔的每日定时访问URL

php实现必应api提交插图
很多人觉得没用,因为之前很多插件都有主动推送的功能,现在百度的提交方式只剩下API、站点地图、手动提交,当初的的主动提交已经下线,而且就算没下线我也觉得主动提交并不好用,被访问的url主动提交了,没被访问的呢。

手动提交就不说了费事费力,站点地图又是每个站长肯定有且主动提交的,那就只剩下API提交了。其实API提交和手动提交一样,共享提交配额,只是方式不同。我写的demo读取站点地图中的url分批次提交,只要设置一次那么每天都会把提交额度拉满,而且会将读取到的url打乱后提交,这样如果三天不更新内容,也不会三天都提交重复的url了。
php实现必应api提交插图1

废话不多说,直接上代码,只需将必应提供的key和站点地图修改为自己的即可???

$arr = array(
    'http://www.mysqlschool.cn' => array(
        'url'  => array(
            "http://www.mysqlschool.cn/sitemap-post-2021.xml"
            ),
        'bing_key' => "***************"
    ),
);


foreach ($arr as $i => $j) {
	//网站地址
    $website = $i;
    //站点地图
    $url = $j['url'];
    //必应key
    $bing_key = $j['bing_key'];
    
    //配额接口调用地址
    $quota_api = "https://ssl.bing.com/webmaster/api.svc/json/GetUrlSubmissionQuota?siteUrl=$website&apikey=$bing_key";
    
    //URL提交API接口调用地址
    $seturl_api = "https://ssl.bing.com/webmaster/api.svc/json/SubmitUrlBatch?apikey=$bing_key";
    
    $s = file_get_contents($quota_api);
    $s = json_decode($s, true);
    
    echo "$website 必应今日剩余配额:".$s['d']['DailyQuota']."  本月剩余配额:".$s['d']['MonthlyQuota'];echo '<br>';
    
    if($s['d']['DailyQuota']){
        $ch = curl_init();
        
        //防https错误
        $xmlresponse = curl_exec($ch);
        $xml=simplexml_load_string($xmlresponse);
        
        
        $urls = array();
        foreach ($url as $key => $value) {
            curl_setopt($ch, CURLOPT_URL, $value);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $xmlresponse = curl_exec($ch);
            $xml=simplexml_load_string($xmlresponse);
            
            foreach ($xml as $key => $value) {
            	$urls[] = $value->loc;
            }
            
        }
        shuffle($urls);
        //必应api提交每次上限500条
        if ($s['d']['DailyQuota']>=500) {
            $max = 500;
        } else {
            $max = $s['d']['DailyQuota'];
        }
        $urls = array_slice($urls, 0,$s['d']['DailyQuota']);
        if(!$urls){
            echo $website.' 今日配额已全部提交!';continue;
        }
        $url_data = array_chunk($urls, $max, true);
        
        foreach ($url_data as $key => $value) {
            $url_str = implode(',',$value);
            $url_arr = explode(',',$url_str);
            $data = array(
                "siteUrl"=>$website,
                "urlList"=>$url_arr
                );
            $ch = curl_init();
            $options =  array(
                CURLOPT_URL => $seturl_api,
                CURLOPT_POST => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POSTFIELDS => json_encode($data),
                CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
            );
            curl_setopt_array($ch, $options);
            $result = curl_exec($ch);
            echo "$website 必应提交信息:".$result;echo '<br>';
        }
    }

}

有朋友翻译读取xml地图时有的地图格式读不到,这里更新一点代码,上面不适用替换下面的代码试试

$urls = array();
foreach ($url as $key => $value) {
    $xml_object=simplexml_load_file($value); 
    foreach ($xml_object as $key => $value) {
        $urls[] = $value->loc;
    }
            
}

 

发表评论

后才能评论