info('开始执行统计比赛数据任务...'); $this->fixtures(); $this->info('结束执行统计比赛数据任务'); } public function sportData() { try { $today = date('Y-m-d'); $host = env('SPORT_HOST'); $url = "{$host}/api/sport"; $url .= "?date={$today}"; $result = file_get_contents($url); $result = $result ? json_decode($result, true) : []; foreach ($result as $item) { $info = SportModel::where('data_id',$item['data_id'])->first(); $data = [ 'home_team_id' => $item['home_team_id'] ?? '', 'home_team_en' => $item['home_team_en'] ?? '', 'home_team' => $item['home_team'] ?? '', 'home_team_logo' => $item['home_team_logo'] ?? '', 'guest_team_id' => $item['guest_team_id'] ?? '', 'guest_team_en' => $item['guest_team_en'] ?? '', 'guest_team' => $item['guest_team'] ?? '', 'guest_team_logo' => $item['guest_team_logo'] ?? '', 'half_score' => $item['half_score'] ?? '', 'rbt' => $item['rbt'] ?? '', 'is_roll' => $item['is_roll'] ?? 0, 'score' => $item['score'] ?? '', 'league_en' => $item['league_en'] ?? '', 'league' => $item['league'] ?? '', 'odds' => $item['odds'] ?? '', 'state' => $item['state'] ?? 0, 'game_time' => $item['game_time'] ?? 0, 'status' => $item['status'] ?? 0, 'handicap_limit' => $item['handicap_limit'] ?? '', 'over_under_limit' => $item['over_under_limit'] ?? '', 'duying_limit' => $item['duying_limit'] ?? '', 'correct_core_limit' => $item['correct_core_limit'] ?? '', 'odd_even_limit' => $item['odd_even_limit'] ?? '', 'total_goal_limit' => $item['total_goal_limit'] ?? '', 'is_handicap' => $item['is_handicap'] ?? 0, 'is_over_under' => $item['is_over_under'] ?? 0, 'is_duying' => $item['is_duying'] ?? 0, 'is_correct_core' => $item['is_correct_core'] ?? 0, 'is_odd_even' => $item['is_odd_even'] ?? 0, 'is_total_goal' => $item['is_total_goal'] ?? 0, 'is_locked' => $item['is_locked'] ?? 0, ]; if ($info) { //更新数据 SportModel::where('data_id',$item['data_id'])->update($data); } else { $data['data_id'] = $item['data_id']; SportModel::create($data); } } } catch (\Exception $e) { $this->error($e->getMessage()); } return true; } /** * 获取指定日期的所有赛事 * * @return array */ public function fixtures() { $date = Carbon::tomorrow()->toDateString(); $data = SportClientService::fixtures(['date' => $date]); $data = $data['response']; $tableData = []; $status = ['NS' => 0, '1H' => 1, 'HT' => 1, '2H' => 1, 'ET' => 1, 'BT' => 1, 'P' => 1, 'SUSP' => 1, 'INT' => 1, 'LIVE' => 1, 'FT' => 2, 'AET' => 2, 'PEN' => 2, 'PST' => 3, 'CANC' => 4, 'ABD' => 4,]; foreach ($data as $item) { $sport_data = [ 'data_id' => $item['fixture']['id'], 'home_team_id' => $item['teams']['home']['id'], 'home_team_en' => $item['teams']['home']['name'], 'home_team' => lang($item['teams']['home']['name']), 'home_team_logo' => $item['teams']['home']['logo'], 'guest_team_id' => $item['teams']['away']['id'], 'guest_team_en' => $item['teams']['away']['name'], 'guest_team' => lang($item['teams']['away']['name']), 'guest_team_logo' => $item['teams']['away']['logo'], 'half_score' => "{$item['score']['halftime']['home']}-{$item['score']['halftime']['away']}", 'rbt' => $item['fixture']['timestamp'], 'score' => "{$item['score']['fulltime']['home']}-{$item['goals']['fulltime']['away']}", 'league' => lang($item['league']['name']), 'league_en' => $item['league']['name'], 'state' => $status[$item['fixture']['status']['short']],//比赛状态:0未开始1进行中2已完场3延期4取消 'game_time' => $item['fixture']['timestamp'], 'updated_at' => now(), ]; if (!SportModel::where('data_id', $item['fixture']['id'])->exists()) { $sport_data['created_at'] = now(); $tableData[] = $sport_data; } else { SportModel::where('data_id', $item['fixture']['id'])->update($sport_data); } } if ($tableData) { SportModel::insert($tableData); } return $tableData; } // 核心响应数据:赛事列表(数组形式,每个元素对应一场赛事) // "response": [ // { // // 赛事基础信息 // "fixture": { // "id": 239625, // 赛事唯一ID // "referee": null, // 主裁判姓名(null表示暂无数据) // "timezone": "UTC", // 赛事时间所属时区 // "date": "2020-02-06T14:00:00+00:00", // 赛事开始时间(ISO 8601格式) // "timestamp": 1580997600, // 赛事开始时间戳(秒级) // "periods": { // 赛事时段时间戳 // "first": 1580997600, // 上半场开始时间戳 // "second": null // 下半场开始时间戳(null表示尚未开始) // }, // "venue": { // 赛事场馆信息 // "id": 1887, // 场馆唯一ID // "name": "Stade Municipal", // 场馆名称 // "city": "Oued Zem" // 场馆所在城市 // }, // "status": { // 赛事当前状态 // "long": "Halftime", // 状态描述(长文本):半场休息 // "short": "HT", // 状态缩写:HT=Halftime(半场) // "elapsed": 45, // 已进行时长(分钟):45分钟(半场结束) // "extra": null // 补时/加时时长(null表示无) // } // }, // // 联赛信息 // "league": { // "id": 200, // 联赛唯一ID // "name": "Botola Pro", // 联赛名称:摩洛哥职业足球甲级联赛 // "country": "Morocco", // 联赛所属国家 // "logo": "https://media.api-sports.io/football/leagues/115.png", // 联赛logo地址 // "flag": "https://media.api-sports.io/flags/ma.svg", // 国家旗帜地址 // "season": 2019, // 赛事赛季:2019/2020赛季(通常取首年) // "round": "Regular Season - 14" // 联赛轮次:常规赛第14轮 // }, // // 参赛球队信息 // "teams": { // "home": { // 主队信息 // "id": 967, // 主队ID // "name": "Rapide Oued ZEM", // 主队名称 // "logo": "https://media.api-sports.io/football/teams/967.png", // 主队logo地址 // "winner": false // 是否获胜:false(半场暂时落后) // }, // "away": { // 客队信息 // "id": 968, // 客队ID // "name": "Wydad AC", // 客队名称 // "logo": "https://media.api-sports.io/football/teams/968.png", // 客队logo地址 // "winner": true // 是否获胜:true(半场暂时领先) // } // }, // // 进球数(当前已产生的总进球数) // "goals": { // "home": 0, // 主队进球数 // "away": 1 // 客队进球数 // }, // // 比分详情(不同时段的比分) // "score": { // "halftime": { // 半场比分 // "home": 0, // 主队半场进球 // "away": 1 // 客队半场进球 // }, // "fulltime": { // 全场比分(null表示赛事未结束) // "home": null, // "away": null // }, // "extratime": { // 加时赛比分(null表示无加时/未进行) // "home": null, // "away": null // }, // "penalty": { // 点球大战比分(null表示无点球/未进行) // "home": null, // "away": null // } // } }