• 技术文章 >后端开发 >php教程

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

    藏色散人藏色散人2022-10-19 17:06:08原创1188

    PHP实现推送NBA赛事结果的方法:1、创建PHP文件并设置时区;2、采用PHP发起请求聚合数据提供的NBA赛事API;3、通过解析接口返回到JSON;4、提取关注的NBA比赛结果;5、将结果信息通过聚合云推服务推送至我需要接收的终端即可。

    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

    消息效果

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

    钉钉机器人:

    f82ef8c647d9a677d6b257fe835995f.jpg

    微信公众号:

    f191b50729f6653d1750ef69b2b4735.jpg

    邮箱:

    69e1e38084c0b84ebc80dde16c5756d.jpg

    PHP代码

    <?php/**
     * PHP实现NBA赛事结果通知即时推送
     *///设置时区if (PHP_VERSION >= '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中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:NBA赛事 php
    上一篇:带你分析PHP内存木马病毒实现原理 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• php怎么检查数组是否存在元素• php怎么检查数组是否有某个键值对• 使用PHP怎么查询天气预报• 怎么使用PHP查询IP地址归属地
    1/1

    PHP中文网