纯代码(非插件)使帝国CMS用百度API提交工具推送当天新内容
[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!
今天老铁熊二想让他自己站帝国也能自动推送,其实之前还真写过关于插件的;
非插件用代码使帝国cms生成文章时主动(自动)推送给百度增加流量的方法
今天是感觉有几个方法也挺好的,需要综合一下;
一、推送当天内容
1、登陆百度站长平台,获取到网站的推送接口;这个没啥可说的,大家都会
2、在网站根目录下新建一个文件夹,命名为“baiduapi”,并在baiduapi文件夹下创建一个baiduapituisong.php文件,代码如下(数据库配置请自行添加)
<?php header('Content-type:text/html;charset=utf-8'); define('DB_HOST','localhost'); define('DB_USER','替换成数据库用户'); define('DB_PASSWORD','替换成数据库密码'); define('DB_DATABASE','替换成数据库名'); define('DB_PORT','3306'); function connect($host=DB_HOST,$user=DB_USER,$password=DB_PASSWORD,$database=DB_DATABASE,$port=DB_PORT){ $link=@mysqli_connect($host,$user,$password,$database,$port); if(mysqli_connect_errno()){ exit(mysqli_connect_error()); } mysqli_set_charset($link,'utf8'); return $link; } function execute($link,$query){ $result=mysqli_query($link,$query); if(mysqli_errno($link)){ exit(mysqli_error($link)); } return $result; } $start = date('Y-m-d 00:00:00'); $end = date('Y-m-d H:i:s'); $link=connect(); $query="SELECT * FROM `phome_ecms_news` WHERE `truetime` >= unix_timestamp( '$start' ) AND `truetime` <= unix_timestamp( '$end' )"; //获取当天发表的数据 $result=execute($link,$query); while($data_list=mysqli_fetch_assoc($result)){ $urls[]="https://www.laoliang.net".$data_list['titleurl']."\n";//替换成自己的域名 } $api = 'http://data.zz.baidu.com/urls?site=https://www.laoliang.net&token=1234567890'; $ch = curl_init(); $options = array( CURLOPT_URL => $api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => implode("\n", $urls), CURLOPT_HTTPHEADER => array('Content-Type: text/plain'), ); curl_setopt_array($ch, $options); $result = curl_exec($ch); echo $result; ?>
二、xml地图全部推送或按照数量推送
<?php header('Content-Type:text/html;charset=utf-8'); /** 只需修改这里面的两个链接 **/ $xml_url = "https://www.laoliang.net/sitemap.xml"; // 这里修改你站点的xml地图链接 $baidu_api = 'http://data.zz.baidu.com/urls?site=https://www.laoliang.net&token=1234567890';// 这里修改为你在百度站长获取到的推送接口 /***只需修改这里面的两个链接**/ $xmldata =file_get_contents($xml_url); $xmlstring = simplexml_load_string($xmldata,'SimpleXMLElement',LIBXML_NOCDATA); $value_array = json_decode(json_encode($xmlstring),true); $url = []; for ($i =0;$i < count($value_array['url']);$i++){ // echo $value_array['url'][$i]['loc']."<br/>"; $url[]= $value_array['url'][$i]['loc']; } //百度推送接口一次只支持推送2000条数据,所以超过2000条的话需要分组推送 $url_group = array_chunk($url,2000); $count=count($url_group); for($i=0;$i<$count;$i++){ $ch = curl_init(); $options = array( CURLOPT_URL => $baidu_api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => implode("\n",$url_group[$i]), CURLOPT_HTTPHEADER => array('Content-Type:text/plain'), ); curl_setopt_array($ch, $options); $result =curl_exec($ch); curl_close($ch); echo $result; } ?>
三、选择性推送
在帝国cms7.5源文件里面找到3个文件ecmsinfo.php、listinfo.php、userfun.php
ecmsinfo.php在目录e/admin下面。
在任意一个elseif{....}后添加
elseif($enews=="Post_Baidu_sitemap")//文章实时发送百度
{
$id=$_POST['id'];
$urls=$_POST['titleurl'];
ePostBaiduSitemap($id,$urls);
}
listinfo.php在目录e/data/html/list目录下面。在
<input name="id[]" type="checkbox" id="id[]" value="<?=$r[id]?>"<?=$checked?>>
<input name="infoid[]" type="hidden" value="<?=$r['id']?>">
后面添加
<input name="titleurl[<?=$r[id]?>]" type="hidden" value='<?=$titleurl?>'>
还是这个文件里面,在最后一个</table>标签前添加
<tr bgcolor="#FFFFFF">
<td height="25" colspan="8">
<input type="submit" name="Submit101" value="批量提交百度" onClick="document.listform.enews.value='Post_Baidu_sitemap';document.listform.action='ecmsinfo.php';"><font color="#666666"><p>备注:多选框蓝色为未审核信息;发布者红色为会员投稿;信息ID粗体为未生成,点击ID可刷新页面.</p></font></td>
</tr>
userfun.php在目录e/class目录下面。如果你这个文件里面是空的,直接用下面的代码完全覆盖即可。
<?php
//---------------------------用户自定义标签函数文件
//发送给百度时时更新-------------------------------
function ePostBaiduSitemap($id,$_urls){
$site = 'www.laoliang.net';//你的网站域名
$token = '1234567890';//百度给的token
$newsurl = 'https://www.laoliang.net/';//你的网站地址,注意后面的斜杠/
$count = count($id);
if (empty($count))
{
printerror("未选择信息ID", "", 1, 0, 1);
}
$urls=array();
for($i=0;$i<$count;$i++)
{
$id[$i] = (int)$id[$i];
if (array_key_exists($id[$i],$_urls)){
//$urls[] = $_urls[$id[$i]];
$urls[] = $newsurl.$_urls[$id[$i]];
}
}$api = "http://data.zz.baidu.com/urls?site=$site&token=$token";
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
$httpstat = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpstat==200){
$obj = json_decode($result);
printerror("今天剩余{$obj->remain}条,成功提交{$obj->success}条", "", 1, 0, 1);
}else{
printerror('推送失败', "", 1, 0, 1);
}
}
?>
这样就是在每个单独的栏目下面会有一个(批量提交百度)按钮。选择后提交即可。如果没有显示,就批量刷新一下后台就哦可。
一下写了三种方式推送给百度的方式方法,不知道大家都喜欢那种方式,我感觉喜欢更多的还得是插件吧;
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!