利用PHP和crontab实现定时推送链接到百度

2023-03-07 14:53:49 浏览数 (1)

百度站长之家 https://ziyuan.baidu.com 获取自己站点的推送接口

http://data.zz.baidu.com/urls?site=https://www.zets.cn&token=xxxxxxxxxxx 大概就这个样子

代码语言:javascript复制
<?php
//数据量不大用这个
// Load sitemap from URL
$xmldata = file_get_contents("https://www.zets.cn/sitemap.xml", true);

// Parse XML into an array
$xmlstring = simplexml_load_string($xmldata, 'SimpleXMLElement', LIBXML_NOCDATA);
$value_array = json_decode(json_encode($xmlstring), true);

// Extract URLs from the array
$urls = array_column($value_array['url'], 'loc');

// Set up cURL request
$api = 'http://data.zz.baidu.com/urls?site=https://www.zets.cn&token=xxxx';
$ch = curl_init();
$options = [
  CURLOPT_URL => $api,
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POSTFIELDS => implode("n", $urls),
  CURLOPT_HTTPHEADER => ['Content-Type: text/plain'],
];
curl_setopt_array($ch, $options);

// Execute cURL request and print result
$result = curl_exec($ch);
echo $result;

有个哥们跟我说他有几十万数据,呃呃,好吧,数据量庞大用下面这个,但百度一天不就能提交那么几千条么,还是说我井底之蛙了

代码语言:javascript复制
<?php
//站点地图庞大用这个
// 定义 cURL 封装函数
function curl_request($url, $method = 'GET', $data = [], $headers = []) {
  $ch = curl_init();
  $options = [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
  ];

  if ($method == 'POST') {
    $options[CURLOPT_POST] = true;
    $options[CURLOPT_POSTFIELDS] = $data;
  }

  if (!empty($headers)) {
    $options[CURLOPT_HTTPHEADER] = $headers;
  }

  curl_setopt_array($ch, $options);
  $result = curl_exec($ch);
  curl_close($ch);
  return $result;
}

// 从 URL 加载站点地图
$xmldata = file_get_contents("https://www.zets.cn/sitemap.xml", true);

// 将 XML 解析成一个数组
$xmlstring = simplexml_load_string($xmldata, 'SimpleXMLElement', LIBXML_NOCDATA);
$value_array = json_decode(json_encode($xmlstring), true);

// 从数组中提取 URL
$urls = array_column($value_array['url'], 'loc');

// 设置 cURL 请求
$api = 'http://data.zz.baidu.com/urls?site=https://www.zets.cn&token=uneOOjU6IY41hXgW';
$headers = ['Content-Type: text/plain'];

// 批量处理URL
$batchSize = 1000;
$numBatches = ceil(count($urls) / $batchSize);
for ($i = 0; $i < $numBatches; $i  ) {
  // 提取一批网址
  $batch = array_slice($urls, $i * $batchSize, $batchSize);
  // 为该批次设置 POST 数据
  $result = curl_request($api, 'POST', implode("n", $batch), $headers);
  // 打印结果
  echo $result;
}
?>

如果利用宝塔的话可以直接计划任务比如我12小时执行一次(自行操作,不演示了)

crontab 同理

代码语言:javascript复制
crontab -e

vim总会玩吧

代码语言:javascript复制
分 时 日 月 周

* * * * * 任务
0 */12 * * * php /www/wwwroot/你存放文件的路径

如果嫌麻烦,也可以直接放到你任意一个php站点中 然后按路径执行访问 都可以

版权属于:七云‘s Blog

本文链接:https://cloud.tencent.com/developer/article/2235217

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。

0 人点赞