以下就是一个每天自动提交网站URL到百度搜索引擎的PHP脚本代码,
包含定时任务设置说明:
<?php
/**
* 百度搜索引擎自动提交工具
* 每日自动推送网站URL到百度搜索资源平台
*/
// 配置参数
define('BAIDU_API_URL', 'http://data.zz.baidu.com/urls?site=www.yourdomain.com&token=your_baidu_token');
define('SITEMAP_URL', 'https://www.yourdomain.com/sitemap.xml'); // 网站sitemap地址
define('LOG_FILE', __DIR__ . '/baidu_submit.log'); // 日志文件路径
// 主执行函数
function submitToBaidu() {
try {
// 1. 获取待提交的URL列表
$urls = fetchUrlsFromSitemap();
if (empty($urls)) {
logMessage("警告:没有获取到可提交的URL");
return;
}
// 2. 提交到百度
$result = postToBaidu($urls);
// 3. 解析结果
$response = json_decode($result, true);
if (isset($response['error'])) {
logMessage("提交失败: " . $response['error']);
} else {
logMessage(sprintf(
"提交成功! 成功: %d, 剩余配额: %d, 今日剩余: %d",
$response['success'],
$response['remain'],
$response['remain']
));
}
} catch (Exception $e) {
logMessage("系统错误: " . $e->getMessage());
}
}
// 从网站地图获取URL列表
function fetchUrlsFromSitemap() {
$sitemapContent = file_get_contents(SITEMAP_URL);
if (!$sitemapContent) {
throw new Exception("无法获取sitemap文件");
}
// 解析XML获取URL
$xml = simplexml_load_string($sitemapContent);
$urls = [];
foreach ($xml->url as $url) {
$urls[] = (string)$url->loc;
}
// 随机选择20个URL(百度单次最多2000条,每天限额根据权限不同)
shuffle($urls);
return array_slice($urls, 0, min(20, count($urls)));
}
// 提交到百度API
function postToBaidu($urls) {
$ch = curl_init();
$options = [
CURLOPT_URL => BAIDU_API_URL,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => ['Content-Type: text/plain'],
CURLOPT_TIMEOUT => 30
];
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception("CURL错误: " . curl_error($ch));
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
throw new Exception("HTTP错误: " . $httpCode);
}
curl_close($ch);
return $result;
}
// 日志记录
function logMessage($message) {
$logEntry = "[" . date('Y-m-d H:i:s') . "] " . $message . PHP_EOL;
file_put_contents(LOG_FILE, $logEntry, FILE_APPEND);
echo $logEntry; // 命令行执行时输出
}
// 执行主程序
if (php_sapi_name() === 'cli') {
submitToBaidu();
} else {
die("此脚本应通过命令行执行");
}
使用说明
-
配置修改:
- 将
www.yourdomain.com
替换为你的网站域名 - 将
your_baidu_token
替换为百度站长平台的API token - 确保
sitemap.xml
存在且包含最新URL
- 将
-
百度站长平台准备:
- 注册百度搜索资源平台账号:https://ziyuan.baidu.com
- 添加并验证你的网站
- 在「普通收录」→「API提交」获取token
-
服务器定时任务设置(Linux Crontab):
# 每天凌晨3点执行 0 3 * * * /usr/bin/php /path/to/baidu_submit.php
测试命令:
php /path/to/baidu_submit.php
-
Windows 计划任务:
- 创建基本任务
- 选择「每日」执行
- 程序选择:
php.exe
- 参数:脚本完整路径
关键功能说明
-
自动化流程:
- 自动获取网站sitemap中的URL
- 随机选择部分URL提交(避免重复提交)
- 每日自动执行
-
安全机制:
- 异常捕获和日志记录
- HTTP状态码检查
- CURL超时设置
-
日志系统:
- 记录每次提交结果
- 包含成功数量、剩余配额
- 错误信息详细记录
-
配额管理:
- 自动处理百度API限制
- 每次提交适量URL(示例为20条,可调整)
增强建议
-
多sitemap支持:
// 可扩展为支持多个sitemap $sitemaps = [ 'https://www.yourdomain.com/sitemap1.xml', 'https://www.yourdomain.com/sitemap2.xml' ];
-
数据库集成:
- 从数据库直接读取新生成的URL
- 记录已提交URL避免重复
-
邮件通知:
// 添加错误通知功能 if (isset($response['error'])) { mail('admin@domain.com', '百度提交失败', $response['error']); }
-
自适应配额:
// 根据剩余配额调整提交数量 $submitCount = min($dailyQuota, count($urls));
-
验证文件存在:
// 提交前检查URL可访问性 if (!checkUrlExists($url)) { continue; }
注意:百度API提交有配额限制(新站通常200条/天),超出配额会自动拒绝。建议在网站更新后立即执行,而非每天全部URL重复提交。
完整文档参考:百度搜索资源平台API文档