中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP怎么實現推送NBA賽事結果

發布時間:2022-10-18 16:10:44 來源:億速云 閱讀:130 作者:iii 欄目:編程語言

這篇“PHP怎么實現推送NBA賽事結果”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“PHP怎么實現推送NBA賽事結果”文章吧。

PHP實現推送NBA賽事結果的方法:1、創建PHP文件并設置時區;2、采用PHP發起請求聚合數據提供的NBA賽事API;3、通過解析接口返回到JSON;4、提取關注的NBA比賽結果;5、將結果信息通過聚合云推服務推送至我需要接收的終端即可。

本教程操作環境: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怎么實現推送NBA賽事結果

微信公眾號:

PHP怎么實現推送NBA賽事結果

郵箱:

PHP怎么實現推送NBA賽事結果

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怎么實現推送NBA賽事結果”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

太白县| 隆尧县| 万山特区| 阳谷县| 文成县| 左贡县| 铜川市| 宁化县| 兰坪| 新密市| 龙里县| 顺昌县| 天台县| 改则县| 宁都县| 甘孜县| 奈曼旗| 博客| 辽源市| 汕头市| 紫阳县| 定兴县| 克东县| 彩票| 洪雅县| 论坛| 德昌县| 屏山县| 双牌县| 绥棱县| 肃宁县| 博乐市| 贵港市| 内丘县| 武鸣县| 香河县| 岳普湖县| 陆川县| 鄂托克前旗| 江孜县| 饶河县|