You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Telegram Bot在板球比分更新时自动推送消息至群组

解决方案

核心问题原因

你之前用while+sleep的方案存在先天缺陷:PHP网页触发的脚本默认有最大执行时间限制,即便是CLI模式下的死循环也容易因为内存泄漏、网络波动导致进程崩溃,没有自动恢复机制,稳定性极差。

最优实现方案:定时任务+状态缓存

这个方案实现简单、稳定性高,完全没有超时问题,适配你的需求。

第一步:修改PHP业务脚本

核心逻辑是新增本地缓存存储上一次推送的比分,只有当新拉取的比分和缓存不一致时才推送消息,避免重复刷屏。

<?php
$token = 'xyz';
$group_name = 'xyz';
// 定义缓存文件路径,用于存储上一次推送的比分
$cache_file = './last_score.txt';

// 读取上一次的比分
$last_score = '';
if (file_exists($cache_file)) {
    $last_score = trim(file_get_contents($cache_file));
}

// 请求赛事API,加容错处理
$ipl = @file_get_contents('https://cricket-api.vercel.app/cri.php?url=https://www.cricbuzz.com/live-cricket-scores/37631/kkr-vs-srh-49th-match-indian-premier-league-2021');
if (!$ipl) {
    exit; // 请求失败直接退出,下次再跑
}

$ipl_data = json_decode($ipl, true);
if (!$ipl_data || !isset($ipl_data['livescore']['current'])) {
    exit; // 数据解析失败直接退出
}

$current_score = $ipl_data['livescore']['current'];

// 比分变化才推送
if ($current_score !== $last_score) {
    // 比分内容要url编码,避免特殊字符导致发送失败
    $text = urlencode($current_score);
    $bot_url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$group_name}&text={$text}";
    @file_get_contents($bot_url);
    // 更新缓存
    file_put_contents($cache_file, $current_score);
}
?>

第二步:配置定时任务

Linux系统直接用crontab配置定时执行脚本即可,不需要手动跑死循环:

  1. 先获取你的PHP执行路径,执行命令which php得到路径比如/usr/bin/php
  2. 执行crontab -e编辑定时任务
  3. 新增以下配置(示例为每分钟执行1次,可根据需求调整频率):
* * * * * /usr/bin/php /你的脚本完整路径/cricket_bot.php > /dev/null 2>&1

如果需要30秒执行一次,可以新增两条规则:

* * * * * /usr/bin/php /你的脚本完整路径/cricket_bot.php > /dev/null 2>&1
* * * * * sleep 30; /usr/bin/php /你的脚本完整路径/cricket_bot.php > /dev/null 2>&1

注意事项

  • 要给缓存文件所在目录开读写权限,避免无法写入缓存
  • 赛事结束后可以手动关闭定时任务,避免无效请求
  • 如果需要更高的稳定性,可以增加日志记录,排查请求失败、发送失败的问题

内容的提问来源于stack exchange,提问作者Shakti Goyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:18:03