FixtureService.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Sport;
  4. use App\Services\ApiFootball\Client;
  5. use Carbon\Carbon;
  6. use Illuminate\Support\Facades\Cache;
  7. class FixtureService extends BaseService
  8. {
  9. static function odds($id)
  10. {
  11. $key = "odds_{$id}";
  12. $odds = Cache::get($key, null);
  13. if ($odds) return json_decode($odds, true);
  14. $res = Client::odds(['fixture' => $id]);
  15. if (count($res['response']) <= 0) return [];
  16. $res = $res['response'][0];
  17. Cache::put($key, $res, now()->addHours(3));
  18. return $res;
  19. }
  20. /**
  21. * 将进行中的赛事 更新赔率
  22. * 5秒更新一次
  23. * @return void
  24. */
  25. static function updateOdds()
  26. {
  27. $list = Client::oddsLive();
  28. foreach ($list['response'] as $item) {
  29. $sport = Sport::where('data_id', $item['fixture']['id'])->first();
  30. $sport->odds = json_encode($item['odds']);
  31. $sport->state = 1;
  32. $score = "";
  33. $score .= $item['teams']['home']['goals'];
  34. $score .= "-";
  35. $score .= $item['teams']['away']['goals'];
  36. if ($item['fixture']['status']['long'] == 'First Half') {
  37. $sport->half_score = $score;
  38. }
  39. $sport->score = $score;
  40. $sport->save();
  41. }
  42. }
  43. /**
  44. * 将第二天的赛事插入到数据库
  45. * @return array
  46. */
  47. static function index()
  48. {
  49. $date = Carbon::tomorrow()->toDateString();
  50. $data = Client::fixtures(['date' => $date]);
  51. $data = $data['response'];
  52. $tableData = [];
  53. $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,];
  54. foreach ($data as $item) {
  55. if (!Sport::where('data_id', $item['fixture']['id'])->exists()) {
  56. $tableData[] = [
  57. 'data_id' => $item['fixture']['id'],
  58. 'home_team_id' => $item['teams']['home']['id'],
  59. 'home_team_en' => $item['teams']['home']['name'],
  60. 'home_team' => lang($item['teams']['home']['name']),
  61. 'home_team_logo' => $item['teams']['home']['logo'],
  62. 'guest_team_id' => $item['teams']['away']['id'],
  63. 'guest_team_en' => $item['teams']['away']['name'],
  64. 'guest_team' => lang($item['teams']['away']['name']),
  65. 'guest_team_logo' => $item['teams']['away']['logo'],
  66. 'half_score' => "{$item['score']['halftime']['home']}-{$item['score']['halftime']['away']}",
  67. 'rbt' => $item['fixture']['timestamp'],
  68. 'score' => "{$item['goals']['home']}-{$item['goals']['away']}",
  69. 'league' => lang($item['league']['name']),
  70. 'league_en' => $item['league']['name'],
  71. 'state' => $status[$item['fixture']['status']['short']],//比赛状态:0未开始1进行中2已完场3延期4取消
  72. 'game_time' => $item['fixture']['timestamp'],
  73. ];
  74. }
  75. }
  76. Sport::insert($tableData);
  77. return $tableData;
  78. }
  79. }