今天用php实现定时推送网站新增的URL到各大网站平台。
效果图:
代码原理:
读取站点的sitemap.xml文件,之后提取为数组保存并curl到站长平台,推送完成之后将数据写入到本地。再次执行的时候会按照以前的文件来查询新增URL进行提交,已有的则会忽略。
PHP代码:
<?php
// 读取文件
$file = 'https://youmain.com/sitemap.xml';
$content = file_get_contents($file);
preg_match_all('/<loc>(.*?)</loc>/', $content, $out, PREG_PATTERN_ORDER);
$data = $out[1];
// 判断是否已经写入内容,第一次文件不存在,所以失效
if(file_exists('addUrl_log/tj_log.txt')){
$a = file('addUrl_log/tj_log.txt');
foreach($a as $line => $content){
$row[] = trim($content);
}
// 新添加进来的url进行保存
$duibi = array_merge(array_diff($row,$data),array_diff($data,$row));
// 赋值未提交过的地址给原本的变量名
$data = $duibi;
// echo '<pre>';
// print_r($data);
}
$api = 'http://data.zz.baidu.com/urls?appid=站点编号&token=准入密钥';
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("n", $data),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
echo $result;
// {"remain":4999514,"success":486,"success_batch":486,"remain_batch":4999514}
// 返回内容解析并判断是否已经提交
$return = json_decode($result,true);
if($return['success'] == $return['success_batch']){
$myfile = fopen("addUrl_log/tj_log.txt", "a+");
$str = implode("n", $data);
if(!empty($duibi)){
fwrite($myfile,"n");
}
fwrite($myfile,$str);
fclose($myfile);
exit("推送完毕!保存完毕!共成功:".$return['success_batch']);
}
正文结束