|
@@ -16,7 +16,8 @@ class Sport extends Command
|
|
|
*
|
|
*
|
|
|
* @var string
|
|
* @var string
|
|
|
*/
|
|
*/
|
|
|
- protected $signature = 'sport';
|
|
|
|
|
|
|
+ protected $signature = 'sport {is_live=0}';
|
|
|
|
|
+ protected $is_live = 0;
|
|
|
|
|
|
|
|
protected $short_status = [
|
|
protected $short_status = [
|
|
|
'TBD' => 0,
|
|
'TBD' => 0,
|
|
@@ -56,10 +57,85 @@ class Sport extends Command
|
|
|
{
|
|
{
|
|
|
|
|
|
|
|
$this->info('开始执行统计比赛数据任务...');
|
|
$this->info('开始执行统计比赛数据任务...');
|
|
|
- $this->fixtures();
|
|
|
|
|
|
|
+
|
|
|
|
|
+ $this->is_live = $this->argument('is_live');
|
|
|
|
|
+ if ($this->is_live == 1) {
|
|
|
|
|
+ //进行中的赛事,定时更新
|
|
|
|
|
+ $this->liveFixtures();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //未开始的赛事拉取
|
|
|
|
|
+ $this->fixtures();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$this->info('结束执行统计比赛数据任务');
|
|
$this->info('结束执行统计比赛数据任务');
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ //更新进行中的赛事
|
|
|
|
|
+ public function liveFixtures()
|
|
|
|
|
+ {
|
|
|
|
|
+ $data = SportClientService::fixtures(['live' => 'all']);
|
|
|
|
|
+ $data = $data['response'];
|
|
|
|
|
+ $tableData = [];
|
|
|
|
|
+ $status = $this->short_status;
|
|
|
|
|
+ foreach ($data as $item) {
|
|
|
|
|
+ $home_statistics = !empty($item['statistics']) ? $item['statistics'][0]['statistics'] : '';
|
|
|
|
|
+ $away_statistics = !empty($item['statistics']) ? $item['statistics'][1]['statistics'] : '';
|
|
|
|
|
|
|
|
|
|
+ $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' => isset($item['score']['fulltime']) ? "{$item['score']['fulltime']['home']}-{$item['score']['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'],
|
|
|
|
|
+ 'status' => 1,
|
|
|
|
|
+ 'updated_at' => now(),
|
|
|
|
|
+ 'home_statistics' => $home_statistics,
|
|
|
|
|
+ 'away_statistics' => $away_statistics,
|
|
|
|
|
+ ];
|
|
|
|
|
+ $sport_data['score'] = $sport_data['score'] == '-' ? '' : $sport_data['score'];
|
|
|
|
|
+ $sport_data['half_score'] = $sport_data['half_score'] == '-' ? '' : $sport_data['half_score'];
|
|
|
|
|
+
|
|
|
|
|
+ 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 ($sport_data['state'] == 2 && !empty($item['events'])) {
|
|
|
|
|
+ foreach($item['events'] as $event) {
|
|
|
|
|
+ SportEvent::create([
|
|
|
|
|
+ 'data_id' => $item['fixture']['id'],
|
|
|
|
|
+ 'type' => $event['type'],
|
|
|
|
|
+ 'time_elapsed' => $event['time']['elapsed'],
|
|
|
|
|
+ 'time' => json_encode($event['time']),
|
|
|
|
|
+ 'detail' => $event['detail'],
|
|
|
|
|
+ 'player' => $event['player'] ? json_encode($event['player']) : $event['player'],
|
|
|
|
|
+ 'team_id' => $event['team']['id'],
|
|
|
|
|
+ 'comments' => $event['comments'],
|
|
|
|
|
+ 'assist' => $event['assist'] ? json_encode($event['assist']) : $event['assist'],
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($tableData) {
|
|
|
|
|
+ SportModel::insert($tableData);
|
|
|
|
|
+ }
|
|
|
|
|
+ return $tableData;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 获取指定日期的所有赛事
|
|
* 获取指定日期的所有赛事
|
|
|
*
|
|
*
|
|
@@ -68,12 +144,16 @@ class Sport extends Command
|
|
|
public function fixtures()
|
|
public function fixtures()
|
|
|
{
|
|
{
|
|
|
$date = Carbon::tomorrow()->toDateString();
|
|
$date = Carbon::tomorrow()->toDateString();
|
|
|
- $data = SportClientService::fixtures(['date' => $date]);
|
|
|
|
|
|
|
+ // $date = '2026-03-28';
|
|
|
|
|
+
|
|
|
|
|
+ // $data = SportClientService::odds([
|
|
|
|
|
+ // 'fixture' => 1461571,
|
|
|
|
|
+ // ]);
|
|
|
|
|
+ // file_put_contents("1461571-fixtures.json",json_encode($data));
|
|
|
// $data = SportClientService::fixtures(['live' => 'all']);
|
|
// $data = SportClientService::fixtures(['live' => 'all']);
|
|
|
- // print_r($data);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ $data = SportClientService::fixtures(['date' => $date]);
|
|
|
|
|
|
|
|
- // file_put_contents("all_fixtures.json",json_encode($data));
|
|
|
|
|
- // die;
|
|
|
|
|
$data = $data['response'];
|
|
$data = $data['response'];
|
|
|
$tableData = [];
|
|
$tableData = [];
|
|
|
$status = $this->short_status;
|
|
$status = $this->short_status;
|
|
@@ -102,6 +182,7 @@ class Sport extends Command
|
|
|
'updated_at' => now(),
|
|
'updated_at' => now(),
|
|
|
'home_statistics' => $home_statistics,
|
|
'home_statistics' => $home_statistics,
|
|
|
'away_statistics' => $away_statistics,
|
|
'away_statistics' => $away_statistics,
|
|
|
|
|
+ 'is_send' => 0,
|
|
|
];
|
|
];
|
|
|
$sport_data['score'] = $sport_data['score'] == '-' ? '' : $sport_data['score'];
|
|
$sport_data['score'] = $sport_data['score'] == '-' ? '' : $sport_data['score'];
|
|
|
$sport_data['half_score'] = $sport_data['half_score'] == '-' ? '' : $sport_data['half_score'];
|
|
$sport_data['half_score'] = $sport_data['half_score'] == '-' ? '' : $sport_data['half_score'];
|