最近想弃wordpress转typecho,可是找了几个typecho百度收录提交插件,发现都用不了,全都报错,于是想自己写一个小东西,没有技术,不会写插件,于是只能以下面这种方式实现:
在访问文章管理的时候,会有如下效果:

红框里面是图片,地址是/baidusumit.php?url=xxx,作用是查询这一行的这篇文章是否收录,然后判断是否进行推送的一个php文件,并以图片形式返回结果。
然鹅,不论如何,返回的结果都是红色N

(我设定的是:已收录返回绿色Y,未收录但提交成功返回绿色N,未收录且推送失败返回红色N)
后来我单独测试了网百度推送url
结果是这样的
{"error":401,"message":"site init fail"}
这个结果百度站长后台也没有说明:

咋整
baidusubmit.php代码如下:
//百度主动推送
$site = '站点域名';
$token = '推送token';
$url = $_GET['url'];
if(check($url) == 0){
//收录则返回图片‘是’
img("Y","green");
}else{
//未收录则提交url并返回图片‘否’
$str = urlpost($url);
if(checksubmit($str) == true){
img("N","green");
}else{
img("N","red");
}
}
function urlpost($url){
//推送url函数
$urls = $url;
$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 => $urls,
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
return $result;
curl_close($ch);
}
function check($url){
//检验是否收录
$url = 'http://www.baidu.com/s?wd='.$url;
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$rs=curl_exec($curl);
curl_close($curl);
if(strpos($rs,'为您找到相关结果约0个') === false && strpos($rs,'没有找到') === false && strpos($rs,'没有找到该URL') === false){
return 0;//已收录
}else{
return 1;//未收录
}
}
function img($str,$color){
//返回图片,收录返回Y,未收录返回N,提交成功返回绿色字体,失败返回红色字体
$im = imagecreate(25, 25);
$bg = imagecolorallocate($im, 255, 255, 255); //设置画布的背景为白色
if($color = "red"){
$co = imagecolorallocate($im, 255, 0, 0); //红色字体
}else{
$co = imagecolorallocate($im, 0, 255, 150); //绿色字体
}
imagechar($im, 5,9,4,$str,$co);
header('Content-type:image/png');
imagepng($im);
}
function checksubmit($str){
//检测推送结果
if(strpos($str,'error') === false){
return true;
}else{
return false;
}
}
401错误
健健康康