<?php//提交当日新增url开始,以dedecms为例//一般是直接修改网站主域名与token即可require_once(dirname(__FILE__)."/这里是你的url/common.inc.php");$startTime = strtotime(date('Y-m-d', time()) . ' 00:00:00');$endTime = strtotime(date('Y-m-d', time()) . ' 23:59:59');$sql = 'SELECT id FROM `dede_archives` WHERE pubdate >='. $startTime .' AND pubdate < '. $endTime .' LIMIT 2000';//数字不要超过2000$dsql->Execute('me', $sql);$data = [];while($row = $dsql->GetArray()){ $url = GetOneArchive($row['id'])['arcurl']; $data[] = preg_match("#^(http|https):\/\/#i","$url")? "$url" : $GLOBALS['cfg_basehost'].$url;}//if(!$data){$data = [$_SERVER['HTTP_HOST']. '/' .'sitemap.xml'];} // 数据库不存在当天文章链接则推网站地图链接//提交当日新增url结束// 百度推送api类型地址$requestApiArr = [ 'pc' => 'http://data.zz.baidu.com/urls?site=www.你的域名&token=你的token', 'm' => 'http://data.zz.baidu.com/urls?site=m.你的域名&token=你的token', // todo 若没有M域名的话,将此段注释掉即可// 'mip' => 'http://data.zz.baidu.com/urls?site=www.你的域名&token=你的token&type=mip', // todo 百度MIP接口已关闭,启用放开注释即可// 'fast' => 'http://data.zz.baidu.com/urls?site=http://m.你的域名/&token=你的token&type=daily' // 此为快速收录api,10条[其他为1W条],此接口的另一个功能是链接提交之后即删除];foreach ($requestApiArr as $key => $value) { $tempData = $data; // 临时赋值,处理单独推送成功失败的情况 if($key != 'pc'){ // 替换非PC单独请求域名前缀 $variable = str_replace('www', 'm', $tempData[0]); // 替换表中数据 foreach($tempData as $k=>&$v){ $v = str_replace('www','m', $v); } }else{ $variable = $tempData[0]; } $result = curlRequest($value, $variable); // 提交一条链接获取配额结果 $result = json_decode($result, true); $successRes = $result['success']; if($successRes){unset($tempData[0]);} // 单独请求成功移除临时数组第一个元素,取文件时多取一个 $remain = isset($result['remain']) ? $result['remain'] : 0; // 未够配额操作 $count = count($tempData); // 获取文件中的文章链接 $urls = getFile($key, $count, $remain, $value, $variable); // mip在子函数中单独处理 if ($key != 'mip') { $urlTemp = implode("\n", $tempData) . "\n"; $finalUrl = $urlTemp . $urls; requestData($value,explode("\n", $finalUrl)); // 请求百度推送 } echo "<br>".$key . '------' . $key . '------' . $key . "<hr>";}/** * 获取文件中配额不够的部分 * $key 百度推送api类型【pc/m/fast】 * $count 从数据库取出的文章数 * $remain 剩余配额数 * $api 请求地址 * $url 一条文章链接 * @return string */function getFile($key, $count, $remain, $api, $url){ if($key == 'mip'){ return getFileInfoMip($count, $url); }else{ switch ($key){ case 'pc': $prefix = 'www'; break; case 'm': $prefix = 'm'; break; case 'fast': $prefix = 'm'; } $isDel = ($key == 'fast') ? true : false; // 删除快速推送的未够数量 return getFileInfo('wenjian1', $count, $remain, $isDel, $prefix); }}/** * 获取mip格式的数据 * $count 从数据库取出的文章数 * $url 数据库中查出的第一个url */function getFileInfoMip($count, $url){ $fix = ['www','m']; // todo 根据不同站规则修改的地方[有mip的情况下] for($i=0;$i<count($fix);$i++){ if($fix[$i] == 'www'){ $mip_www_remain = getRemain('http://data.zz.baidu.com/urls?site='. $fix[$i] .'.你的域名&token=你的token&type=mip', $url); // 请求www }elseif ($fix[$i] == 'm'){ $mip_m_remain = getRemain('http://data.zz.baidu.com/urls?site='. $fix[$i] .'.你的域名&token=你的token&type=mip', $url); // 请求m } } // 此部分为mip推送提交获取文件 $urlPath = './wenjian2.txt'; $content = file_get_contents($urlPath); $contentArr = explode("\n", $content); // 取配额不够的数据 $tempDataWWW = []; // todo 根据不同站规则修改的地方[有mip的情况下] $tempDataM = []; foreach($contentArr as $k=>$v){ $countTempDataWWW = count($tempDataWWW)+$count; $countTempDataM = count($tempDataM)+$count; $prefix = getDomainNamePrefix($v, '//', 2); if($countTempDataWWW < $mip_www_remain && $prefix == 'www'){ // todo 根据不同站规则修改的地方[有mip的情况下] $tempDataWWW[] = $v; }elseif ($countTempDataM < $mip_m_remain && $prefix == 'm'){ $tempDataM[] = $v; } // 判断是否跳出 if($countTempDataWWW >= $mip_www_remain && $countTempDataM >= $mip_m_remain){ break; } } // 请求 requestData('http://data.zz.baidu.com/urls?site=www.你的域名&token=你的token&type=mip', $tempDataWWW); requestData('http://data.zz.baidu.com/urls?site=m.你的域名&token=你的token&type=mip', $tempDataM);}/** * 操作文件 * $fileName 读取的文件名 * $count 从数据库取出的文章数 * $remain 百度推送总配额数 * $del 是否删除文件数据 true删除 false不删除 * $prefix 百度api接口前缀 * @return string 以换行拼接的文章地址 */function getFileInfo($fileName, $count, $remain, $isDel=false, $prefix){ if($count < $remain){ // 获取文件 $urlPath = './' . $fileName . '.txt'; $content = file_get_contents($urlPath); $contentArr = explode("\n", $content); $diff = $remain - $count; $tempData = []; // 取配额不够的数据 foreach($contentArr as $k=>$v){ $prefix_value = getDomainNamePrefix($v, '//', 2); if((count($tempData) < $diff) && ($prefix_value == $prefix)){ $tempData[] = $v; if($isDel){unset($contentArr[$k]);} // 最后一次执行fast时删除数据 }elseif(count($tempData) >= $diff){ break; } } $content = implode("\n", $tempData); if($isDel){file_put_contents($urlPath, implode("\n", $contentArr));} // 执行删除操作后重新写入文件 return $content; }}/** * 递归处理数据请求百度接口 * $api 请求百度接口地址 * $urls 文章地址数组 */function requestData( $api, $urls){ $count = count($urls); if($count > 2000){ $number = 2000; // todo 最大不超过两千条 $num = ceil($count / $number); for($i=0; $i<$num; $i++){ $data = array_splice($urls, 0, $number); echo curlRequest($api, implode("\n", $data)); } }else{ if(count($urls) > 0){ // todo 只是限制从文件中获取的 echo curlRequest($api, implode("\n", $urls)); } }}/** * 百度推送 * $api 百度API地址 * $urls 以换行拼接的文章地址 * @return string json */function curlRequest($api, $urls){ $ch = curl_init(); $options = array( CURLOPT_URL => $api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $urls, CURLOPT_HTTPHEADER => array('Content-Type: text/plain'), ); curl_setopt_array($ch, $options); $result = curl_exec($ch); return $result;}/** * 获取推送剩余的条数 * $api 请求地址 * $urls 请求参数 * @return number 剩余配额数 */function getRemain($api, $urls){ $result = curlRequest($api, $urls); return json_decode($result, true)['remain'];}/** * 获取域名前缀 * $url 地址 * $format 查找url的开头位置 * $len 开头位置后移位数 * @return string */function getDomainNamePrefix($url, $format, $len){ $s = strpos($url, "$format")+$len; $ss = strpos($url, '.', $s); $len = $ss-$s; return substr($url, $s, $len);}exit();