对于平时不能看NBA直播,但又希望第一时间知道喜欢的湖人队的比赛结果。动动小手,简单实现监测湖人队的比赛结果,发送到自己微信、邮箱、钉钉上面。
原理
采用PHP发起请求聚合数据提供的NBA赛事API,通过解析接口返回到JSON,提取我关注的湖人队 比赛结果,并将结果信息通过聚合云推服务推送至我需要接收的终端。
使用的服务
NBA赛事查询接口: https://www.juhe.cn/docs/api/id/92
消息推送服务: tui.juhe.cn
消息效果
如果监测到关注的比赛结果,你在聚合云推配置的接收终端将会收到通知,类似如下:
钉钉机器人:
微信公众号:
邮箱:
PHP代码
<?php
if (PHP_VERSION >= '5.1') date_default_timezone_set('PRC');
$nba = new Nba();
$nba->run();
class Nba
{
private $teams = ['洛杉矶湖人'];
public function run()
{
echo "开始监测NBA今日赛程 - ". date("Y-m-d H:i:s") . PHP_EOL;
$todayMatchsResult = $this->getMatchResult();
if ($todayMatchsResult['code'] == '1') {
$parseMatchsResult = $this->parseMatchs($todayMatchsResult['matchs']);
if ($parseMatchsResult) {
$this->pushMsg($parseMatchsResult);
} else {
echo "暂无比赛结果需要推送";
}
} else {
echo $todayMatchsResult['msg'];
}
}
private function pushMsg($msgs = null)
{
$logFile = dirname(__FILE__).DIRECTORY_SEPARATOR."notify_log.txt";
$logContent = file_get_contents($logFile);
$logList = explode("\n", $logContent);
$token = "cd513bd*******b7261e566a3";
$service_id = "1O***Ho";
$title = "NBA赛事结果";
$doc_type = "text";
foreach ($msgs as $m) {
$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;
file_put_contents($logFile, $mHash, FILE_APPEND);
}
}
}
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;
}
private function getMatchResult()
{
$apiUrl = 'http://apis.juhe.cn/fapig/nba/query';
$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];
}
}
private function juheHttpRequest($url, $params = false, $ispost = 0)
{
$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) {
return false;
}
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 - 已经推送过,无需重复推送
|