>首页> IT >

PHP如何实现推送NBA赛事结果

时间:2022-10-18 16:06:25       来源:PHP中文网

本教程操作环境:Windows7系统、PHP8.1版、DELL G3电脑

PHP实现NBA赛事结果即时推送

对于平时不能看NBA直播,但又希望第一时间知道喜欢的湖人队的比赛结果。动动小手,简单实现监测湖人队的比赛结果,发送到自己微信、邮箱、钉钉上面。


(资料图)

原理

采用PHP发起请求聚合数据提供的NBA赛事API,通过解析接口返回到JSON,提取我关注的湖人队比赛结果,并将结果信息通过聚合云推服务推送至我需要接收的终端。

使用的服务

NBA赛事查询接口: https://www.juhe.cn/docs/api/id/92?s=cpphpcn

消息推送服务: tui.juhe.cn

消息效果

如果监测到关注的比赛结果,你在聚合云推配置的接收终端将会收到通知,类似如下:

钉钉机器人:

微信公众号:

邮箱:

PHP代码

= "5.1") date_default_timezone_set("PRC");$nba = new Nba();$nba->run();class Nba{    // 关注的球队列表    // private $teams = ["洛杉矶湖人", "布鲁克林篮网"];    private $teams = ["洛杉矶湖人"];    // 开始执行    public function run()    {        echo "开始监测NBA今日赛程 - ". date("Y-m-d H:i:s") . PHP_EOL;        // 查询今日NBA比赛清单        $todayMatchsResult = $this->getMatchResult();        if ($todayMatchsResult["code"] == "1") {            // 解析比赛结果,提取需要推送的比赛结果            $parseMatchsResult = $this->parseMatchs($todayMatchsResult["matchs"]);            if ($parseMatchsResult) {                $this->pushMsg($parseMatchsResult);            } else {                echo "暂无比赛结果需要推送";            }        } else {            // 查询失败            echo $todayMatchsResult["msg"];        }    }    /**     * 将需要推送的比赛结果, 通过 聚合云推 推送至邮件、钉钉、微信等     * 聚合云推官网: https://tui.juhe.cn/?f=nba     * @param null $msgs     */    private function pushMsg($msgs = null)    {        // 记录已经推送过的msg文件        $logFile = dirname(__FILE__).DIRECTORY_SEPARATOR."notify_log.txt";        $logContent = file_get_contents($logFile);        $logList = explode("\n", $logContent);        // 在聚合云推个人中心获取到的token        $token = "cd513bd*******b7261e566a3";        // 在聚合云推创建的ServiceID        $service_id = "1O***Ho";        // 自定义标题        $title = "NBA赛事结果";        $doc_type = "text";        foreach ($msgs as $m) {            // 消息内容MD5,简单记录本地文件,用于判断是否已经推送,避免重复 (当然也可以使用数据库、缓存等手段)            $mHash = md5($m);            if (in_array($mHash, $logList)) {                // 重复推送                echo "{$m},推送结果:999 - 已经推送过,无需重复推送" . PHP_EOL;            } else {                // 开始推送                $params = [                    "token" => $token,                    "service_id" => $service_id,                    "title" => $title,                    "doc_type" => $doc_type,                    "content" => $m                ];                $pushResContent = $this->juheHttpRequest("https://tui.juhe.cn/api/plus/pushApi", http_build_query($params), 1);                $pushRes = json_decode($pushResContent, true);                echo "{$m},推送结果:{$pushRes["code"]} - {$pushRes["reason"]}" . PHP_EOL;                // 记录log                file_put_contents($logFile, $mHash, FILE_APPEND);            }        }    }    /**     * 解析NBA比赛结果,提取关注的球队比赛结果     * @param null $matchs     */    private function parseMatchs($matchs = null)    {        $matchText = null;        if ($matchs) {            foreach ($matchs as $m) {                if (in_array($m["team1"], $this->teams) || in_array($m["team2"], $this->teams)) {                    // 有关注的球队且完赛                    if ($m["status"] == "3") {                        // 整合比赛球队和结果信息                        $matchText[] = "{$m["team1"]} {$m["team1_score"]} - {$m["team2_score"]} {$m["team2"]}";                    }                }            }        }        return $matchText;    }    /**     * 查询NBA今日比赛状态     * 通过聚合提供的接口,接口详情:https://www.juhe.cn/docs/api/id/92?f=nba     */    private function getMatchResult()    {        // NBA赛事接口地址        $apiUrl = "http://apis.juhe.cn/fapig/nba/query";        // 接口地址请求Key, 自行替换        $apiKey = "69e76b5*********4b87690c8";        $params = [            "key" => $apiKey        ];        $requestContent = $this->juheHttpRequest($apiUrl, http_build_query($params));        $requestResult = json_decode($requestContent, true);        if ($requestResult) {            $errorCode = $requestResult["error_code"];            if ($errorCode == 0) {                // 请求成功                $matchs = isset($requestResult["result"]["matchs"]) ? $requestResult["result"]["matchs"] : null;                if ($matchs) {                    $todayMatchs = null;                    foreach ($matchs as $key => $match) {                        $matchDate = $match["date"];                        if ($matchDate == date("Y-m-d")) {                            // 今日比赛列表                            $todayMatchs = $match["list"];                            break;                        }                    }                    // 返回比赛列表                    return ["code" => "1", "msg" => "请求成功", "matchs" => $todayMatchs];                } else {                    // 无比赛记录                    return ["code" => "1", "msg" => "请求成功", "matchs" => null];                }            } else {                // 请求异常                return ["code" => "2", "msg" => "请求异常:" . $errorCode, "matchs" => null];            }        } else {            // 请求异常,可能网络异常            return ["code" => "2", "msg" => "请求异常:网络异常", "matchs" => null];        }    }    /**     * 发起网络请求函数     * @param string $url 请求的URL     * @param bool $params 请求的参数内容     * @param int $ispost 是否POST请求     * @return bool|string 返回内容     */    private function juheHttpRequest($url, $params = false, $ispost = 0)    {        // $httpInfo = [];        $ch = curl_init();        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36");        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);        curl_setopt($ch, CURLOPT_TIMEOUT, 12);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        if ($ispost) {            curl_setopt($ch, CURLOPT_POST, true);            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);            curl_setopt($ch, CURLOPT_URL, $url);        } else {            if ($params) {                curl_setopt($ch, CURLOPT_URL, $url . "?" . $params);            } else {                curl_setopt($ch, CURLOPT_URL, $url);            }        }        $response = curl_exec($ch);        if ($response === FALSE) {            // echo "cURL Error: ".curl_error($ch);            return false;        }        // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);        // $httpInfo = array_merge($httpInfo, curl_getinfo($ch));        curl_close($ch);        return $response;    }}
登录后复制

计划任务配置

您可以通过crontab等方式定时(每分钟)去执行代码监测。比如crontab配置方式:命令行输入crontab -e进入计划任务配置

# 每分钟执行一次*/1 * * * * /usr/bin/php nba.php >> /data/log.txt
登录后复制
cat /data/log.txt
登录后复制
洛杉矶湖人 102 - 109 密尔沃基雄鹿,推送结果:200 - success开始监测NBA今日赛程 - 2021-11-18 18:41:00洛杉矶湖人 102 - 109 密尔沃基雄鹿,推送结果:999 - 已经推送过,无需重复推送开始监测NBA今日赛程 - 2021-11-18 18:42:01洛杉矶湖人 102 - 109 密尔沃基雄鹿,推送结果:999 - 已经推送过,无需重复推送开始监测NBA今日赛程 - 2021-11-18 18:42:39洛杉矶湖人 102 - 109 密尔沃基雄鹿,推送结果:999 - 已经推送过,无需重复推送开始监测NBA今日赛程 - 2021-11-18 18:43:00洛杉矶湖人 102 - 109 密尔沃基雄鹿,推送结果:999 - 已经推送过,无需重复推送
登录后复制

推荐学习:《PHP视频教程》

以上就是PHP如何实现推送NBA赛事结果的详细内容,更多请关注php中文网其它相关文章!

关键词: 洛杉矶湖人 密尔沃基雄鹿 相关文章