PHP實現推播NBA賽事結果的方法:1、建立PHP檔案並設定時區;2、採用PHP發起請求聚合資料提供的NBA賽事API;3、通過解析介面返回到JSON;4、提取關注的NBA比賽結果;5、將結果資訊通過聚合雲推服務推播至我需要接收的終端即可。
php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
本教學操作環境: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程式碼
<?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賽事結果的詳細內容,更多請關注TW511.COM其它相關文章!