PHP如何快速实现NBA赛事结果的实时推送?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1556个文字,预计阅读时间需要7分钟。
PHP实现推送NBA赛事结果的简单方法:
1.创建PHP文件并设置时区;
2.使用PHP发起请求获取NBA赛事数据API;
3.解析接口返回的JSON数据;
4.提取关注的NBA赛事结果;
5.将结果信息聚合输出。
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赛事查询接口: 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'];
}
} /**
* 将需要推送的比赛结果, 通过 聚合云推 推送至邮件、钉钉、微信等
* 聚合云推官网: 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('tui.juhe.cn/api/plus/pushApi', www.juhe.cn/docs/api/id/92?f=nba
*/
private function getMatchResult() { // NBA赛事接口地址
$apiUrl = '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赛事结果的详细内容,更多请关注自由互联其它相关文章!
本文共计1556个文字,预计阅读时间需要7分钟。
PHP实现推送NBA赛事结果的简单方法:
1.创建PHP文件并设置时区;
2.使用PHP发起请求获取NBA赛事数据API;
3.解析接口返回的JSON数据;
4.提取关注的NBA赛事结果;
5.将结果信息聚合输出。
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赛事查询接口: 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'];
}
} /**
* 将需要推送的比赛结果, 通过 聚合云推 推送至邮件、钉钉、微信等
* 聚合云推官网: 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('tui.juhe.cn/api/plus/pushApi', www.juhe.cn/docs/api/id/92?f=nba
*/
private function getMatchResult() { // NBA赛事接口地址
$apiUrl = '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赛事结果的详细内容,更多请关注自由互联其它相关文章!

