This commit is contained in:
salam committed 2026-07-20 08:27:33 +02:00
1 parent 88205b7aa1
commit 46eb3767f9
8 files changed
+208 -122

No files matched your search

@@ -9,6 +9,7 @@ use App\Console\Commands\Grapper\Sofascore\Helper\Sleeper;
use App\Console\Commands\Nuh;
use App\Models\SofaScoreDayTournament;
use App\Models\SofaScoreEventGrapped;
use App\Models\SofaScoreTaskDay;
use App\Models\SofaScoreTaskTournament;
use App\Utilities\Notice;
use Illuminate\Support\Carbon;
@@ -22,6 +23,8 @@ class Grapper
$task_id = Nuh::$options['task'] ?? 0;
$restart = Nuh::$options['restart'] ?? 0;
$days = LoadDays::load();
$active_tournaments = SofaScoreTaskTournament::with('tournament')->where('sofa_score_task_id', $task_id)->where('disabled', false)->get();
@@ -30,15 +33,22 @@ class Grapper
* empty grapping folder
* empty mailing text
*/
if ($debug)
Notice::note('File clean directory', 'b');
if ($restart) {
File::cleanDirectory(Sofascore::$storage);
File::cleanDirectory(Sofascore::$storage);
if ($debug)
Notice::note('Truncate SofaScoreEventGrapped', 'b');
SofaScoreEventGrapped::where('grapper_id', $task_id)->delete();
SofaScoreEventGrapped::where('grapper_id', $task_id)->delete();
if ($debug) {
Notice::note('Restart grapper', 'br');
Notice::note('Cleand task directory', 'b');
Notice::note('Flush table SofaScoreEventGrapped for task', 'b');
}
} else {
if ($debug) {
Notice::note('Continuing grapper', 'bg');
}
}
foreach ($days as $d) {
@@ -46,16 +56,16 @@ class Grapper
foreach ($active_tournaments as $tournament) {
if ($debug) {
Notice::note($tournament->tournament->name, 'bg');
}
$day = $d['day'];
if ($debug) {
Notice::note($day . ' - ' . $tournament->tournament->name, 'b');
}
$res = SofaScoreDayTournament::whereDate('day', '=', $day)->where('tournament_id', $tournament->sofa_score_tournament_id)->first();
if ($res) {
if ($debug) {
Notice::note($day, 'g');
}
@@ -74,125 +84,140 @@ class Grapper
foreach ($data['events'] as $event) {
$now = Carbon::now()->subHours(3);
$carbon_day = new Carbon($day);
$starttime = Carbon::createFromTimestamp($event['startTimestamp']);
if ($now->greaterThan($starttime) && $starttime->isSameDay($carbon_day)) {
Sleeper::rand(1);
if (SofaScoreEventGrapped::where('id', (int) $event['id'])->exists()) {
if ($debug) {
Notice::note($day . ' - ' . $event['homeTeam']['name'] . ' vs ' . $event['awayTeam']['name'], 'bg');
Notice::note('Grapped ' . $day . ' - ' . $event['homeTeam']['name'] . ' vs ' . $event['awayTeam']['name'], 'g');
}
} else {
$grapped = SofaScoreEventGrapped::firstOrNew(['id' => $event['id']]);
$grapped->grapper_id = $task_id;
$grapped->day = $day;
$grapped->liga = $event['tournament']['name'];
$grapped->name = $event['homeTeam']['name'] . ' vs ' . $event['awayTeam']['name'];
$grapped->url = $url;
$grapped->starttime = $starttime->toDateTimeString();
$now = Carbon::now()->subHours(3);
$folder = Sofascore::$storage . '/' . $day . '/' . $event['tournament']['slug'] . '/' . $event['slug'];
$carbon_day = new Carbon($day);
File::makeDirectory($folder, 0775, true, true);
$starttime = Carbon::createFromTimestamp($event['startTimestamp']);
/*********************************
* EVENT event
*********************************/
if ($now->greaterThan($starttime) && $starttime->isSameDay($carbon_day)) {
File::put($folder . '/event.json', json_encode($event));
Sleeper::rand(1);
/*********************************
* EVENT statistics
*********************************/
if ($debug) {
Notice::note('New ' . $day . ' - ' . $event['homeTeam']['name'] . ' vs ' . $event['awayTeam']['name'], 'bg');
}
$event_id = $event['id'];
$grapped = SofaScoreEventGrapped::firstOrNew(['id' => $event['id']]);
$grapped->grapper_id = $task_id;
$grapped->day = $day;
$grapped->liga = $event['tournament']['name'];
$grapped->name = $event['homeTeam']['name'] . ' vs ' . $event['awayTeam']['name'];
$grapped->url = $url;
$grapped->starttime = $starttime->toDateTimeString();
// if (!$grapped['got_statistics'] && isset($event['hasEventPlayerStatistics']) && $event['hasEventPlayerStatistics'] == true) {
$folder = Sofascore::$storage . '/' . $day . '/' . $event['tournament']['slug'] . '/' . $event['slug'];
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/statistics";
File::makeDirectory($folder, 0775, true, true);
Sleeper::rand();
/*********************************
* EVENT event
*********************************/
$data = CurlSofa::load($url);
File::put($folder . '/event.json', json_encode($event));
$data['id'] = $event_id;
/*********************************
* EVENT statistics
*********************************/
File::put($folder . '/statistics.json', json_encode($data));
$event_id = $event['id'];
$grapped->got_statistics = 1;
// if (!$grapped['got_statistics'] && isset($event['hasEventPlayerStatistics']) && $event['hasEventPlayerStatistics'] == true) {
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/statistics";
Sleeper::rand();
$data = CurlSofa::load($url);
$data['id'] = $event_id;
File::put($folder . '/statistics.json', json_encode($data));
$grapped->got_statistics = 1;
// }
/*********************************
* EVENT lineups
*********************************/
/*********************************
* EVENT lineups
*********************************/
// if (!$grapped['got_lineups']) {
// if (!$grapped['got_lineups']) {
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/lineups";
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/lineups";
Sleeper::rand();
Sleeper::rand();
$data = CurlSofa::load($url);
$data = CurlSofa::load($url);
$data['id'] = $event_id;
$data['id'] = $event_id;
File::put($folder . '/lineups.json', json_encode($data));
File::put($folder . '/lineups.json', json_encode($data));
$grapped->got_lineups = 1;
$grapped->got_lineups = 1;
// }
/*********************************
* EVENT odds
*********************************/
/*********************************
* EVENT odds
*********************************/
// if (!$grapped['got_odds']) {
// if (!$grapped['got_odds']) {
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/odds/1/all";
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/odds/1/all";
Sleeper::rand();
Sleeper::rand();
$data = CurlSofa::load($url);
$data = CurlSofa::load($url);
$data['id'] = $event_id;
$data['id'] = $event_id;
File::put($folder . '/odds.json', json_encode($data));
File::put($folder . '/odds.json', json_encode($data));
$grapped->got_odds = 1;
$grapped->got_odds = 1;
// }
/*********************************
* EVENT incidents
*********************************/
/*********************************
* EVENT incidents
*********************************/
// if (!$grapped['got_incidents']) {
// if (!$grapped['got_incidents']) {
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/incidents";
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/incidents";
Sleeper::rand();
Sleeper::rand();
$data = CurlSofa::load($url);
$data = CurlSofa::load($url);
$data['id'] = $event_id;
$data['id'] = $event_id;
File::put($folder . '/incidents.json', json_encode($data));
File::put($folder . '/incidents.json', json_encode($data));
$grapped->got_incidents = 1;
// }
$grapped->got_incidents = 1;
// }
$grapped->save();
$grapped->save();
}
}
}
}
}
if ($debug) {
Notice::note('END ' . $tournament->tournament->name, 'p');
}
}
if ($debug) {
Notice::note('tournament done', 'bb');
}
SofaScoreTaskDay::updateOrCreate([
'grapper_id' => (int) $task_id,
'day' => $day,
], [
'done' => 1,
]);
Notice::note('DAY DONE', 'br', 1);
}
}
}
@@ -4,6 +4,7 @@ namespace App\Console\Commands\Grapper\Sofascore\Helper;
use App\Console\Commands\Nuh;
use App\Models\SofaScoreTask;
use App\Models\SofaScoreTaskDay;
use App\Utilities\Notice;
use Illuminate\Support\Carbon;
@@ -13,6 +14,8 @@ class LoadDays
{
$debug = Nuh::$options['d'] ?? 0;
$restart = Nuh::$options['restart'] ?? 0;
$task_id = Nuh::$options['task'] ?? 0;
$dates = [];
@@ -25,30 +28,28 @@ class LoadDays
$task = SofaScoreTask::with('sport')->where('id', $task_id)->first();
if ($debug) {
Notice::note('LoadDays ' . $task->mode . ' sport: ' . $task->sport_id);
Notice::note('Task id:' . $task->id . ', mode:' . $task->mode . ', sport:' . $task->sport->name);
}
switch ($task->id) {
switch ($task->mode) {
case 1:
case 'auto_updater':
$dates[] = [
'day' => Carbon::now()->subDay()->format('Y-m-d'),
'slug' => $task->sport->ss_slug,
'sport_id' => $task->sport_id,
'run_repeatedly' => $task->run_repeatedly,
];
break;
case 2:
case 'date':
$dates[] = [
'day' => self::validateDate($task->day_from),
'slug' => $task->sport->ss_slug,
'sport_id' => $task->sport_id,
'run_repeatedly' => $task->run_repeatedly,
];
break;
case 3:
case 'range':
$from = self::validateDate($task->day_from);
$to = self::validateDate($task->day_to);
@@ -58,18 +59,36 @@ class LoadDays
$lengthdates = $from->diffInDays($to);
if ($lengthdates < 1) {
Notice::note('wrong date start must be before end', 'r', 1);
} elseif ($lengthdates > 60) {
Notice::note('wrong date maximal 60 dates allowed', 'r', 1);
Notice::note('start must be before end', 'r', 1);
}
while ($from <= $to) {
$dates[] = [
'day' => $from->format('Y-m-d'),
'slug' => $task->sport->ss_slug,
'sport_id' => $task->sport_id,
'run_repeatedly' => $task->run_repeatedly,
];
$from->addDay();
if ($restart) {
// get all days
while ($from <= $to) {
$dates[] = [
'day' => $from->format('Y-m-d'),
'slug' => $task->sport->ss_slug,
'sport_id' => $task->sport_id,
];
$from->addDay();
}
} else {
// remove days done
while ($from <= $to) {
$res = SofaScoreTaskDay::firstOrNew(['grapper_id' => (int) $task_id, 'day' => $from->format('Y-m-d')]);
if (!$res->done) {
$dates[] = [
'day' => $from->format('Y-m-d'),
'slug' => $task->sport->ss_slug,
'sport_id' => $task->sport_id,
];
}
$from->addDay();
}
shuffle($dates);
}
break;
}