今天用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']); }