以下就是一个每天自动提交网站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("此脚本应通过命令行执行");
}

使用说明

  1. 配置修改

    • www.yourdomain.com 替换为你的网站域名
    • your_baidu_token 替换为百度站长平台的API token
    • 确保 sitemap.xml 存在且包含最新URL
  2. 百度站长平台准备

    • 注册百度搜索资源平台账号:https://ziyuan.baidu.com
    • 添加并验证你的网站
    • 在「普通收录」→「API提交」获取token
  3. 服务器定时任务设置(Linux Crontab)

    # 每天凌晨3点执行
    0 3 * * * /usr/bin/php /path/to/baidu_submit.php
    

    测试命令:php /path/to/baidu_submit.php

  4. Windows 计划任务

    • 创建基本任务
    • 选择「每日」执行
    • 程序选择:php.exe
    • 参数:脚本完整路径

关键功能说明

  1. 自动化流程

    • 自动获取网站sitemap中的URL
    • 随机选择部分URL提交(避免重复提交)
    • 每日自动执行
  2. 安全机制

    • 异常捕获和日志记录
    • HTTP状态码检查
    • CURL超时设置
  3. 日志系统

    • 记录每次提交结果
    • 包含成功数量、剩余配额
    • 错误信息详细记录
  4. 配额管理

    • 自动处理百度API限制
    • 每次提交适量URL(示例为20条,可调整)

增强建议

  1. 多sitemap支持

    // 可扩展为支持多个sitemap
    $sitemaps = [
        'https://www.yourdomain.com/sitemap1.xml',
        'https://www.yourdomain.com/sitemap2.xml'
    ];
    
  2. 数据库集成

    • 从数据库直接读取新生成的URL
    • 记录已提交URL避免重复
  3. 邮件通知

    // 添加错误通知功能
    if (isset($response['error'])) {
        mail('admin@domain.com', '百度提交失败', $response['error']);
    }
    
  4. 自适应配额

    // 根据剩余配额调整提交数量
    $submitCount = min($dailyQuota, count($urls));
    
  5. 验证文件存在

    // 提交前检查URL可访问性
    if (!checkUrlExists($url)) {
        continue;
    }
    

注意:百度API提交有配额限制(新站通常200条/天),超出配额会自动拒绝。建议在网站更新后立即执行,而非每天全部URL重复提交。

完整文档参考:百度搜索资源平台API文档