wip
This commit is contained in:
1 parent
75d7914a59
commit
dc76eb35ae
21 files changed
+177
-178
No files matched your search
@@ -28,13 +28,9 @@ class Sofascore
|
||||
|
||||
self::$storage_path = storage_path('zip_sofascore_data');
|
||||
|
||||
$task = Nuh::$options['task'] ?? 0;
|
||||
$function = Nuh::$options['fun'];
|
||||
|
||||
$process = Nuh::$options['run'];
|
||||
|
||||
$days = LoadDays::load($task);
|
||||
|
||||
switch($process){
|
||||
switch($function){
|
||||
case 1:
|
||||
PlayerPerSeason::run();
|
||||
break;
|
||||
@@ -42,29 +38,22 @@ class Sofascore
|
||||
SettingsToLocal::run();
|
||||
break;
|
||||
case 3:
|
||||
if($days){
|
||||
CreateZip::run($days);
|
||||
}
|
||||
CreateZip::run();
|
||||
break;
|
||||
case 4:
|
||||
if($days){
|
||||
SendMail::run($days);
|
||||
}
|
||||
SendMail::run();
|
||||
break;
|
||||
case 5:
|
||||
if($days){
|
||||
DaysTournament::run($days);
|
||||
}
|
||||
DaysTournament::run();
|
||||
break;
|
||||
case 6:
|
||||
if($days){
|
||||
Grapper::load($days);
|
||||
}
|
||||
Grapper::load();
|
||||
break;
|
||||
case 7:
|
||||
if($days){
|
||||
TaskConfig::set($task);
|
||||
}
|
||||
TaskConfig::start();
|
||||
break;
|
||||
case 8:
|
||||
TaskConfig::end();
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -2,15 +2,20 @@
|
||||
|
||||
namespace App\Console\Commands\Grapper\Sofascore;
|
||||
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\LoadDays;
|
||||
use App\Console\Commands\Nuh;
|
||||
use App\Utilities\Notice;
|
||||
use App\Utilities\ZipFolder;
|
||||
|
||||
class CreateZip
|
||||
{
|
||||
public static function run(array $days)
|
||||
public static function run()
|
||||
{
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
$task = Nuh::$options['task'] ?? 0;
|
||||
|
||||
$days = LoadDays::load($task);
|
||||
|
||||
foreach ($days as $d) {
|
||||
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
|
||||
namespace App\Console\Commands\Grapper\Sofascore;
|
||||
|
||||
use App\Console\Commands\Grapper\Sofascore\CurlSofa;
|
||||
use App\Console\Commands\Grapper\Sofascore\Tools\Sleeper;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\CurlSofa;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\LoadDays;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\Sleeper;
|
||||
use App\Console\Commands\Nuh;
|
||||
use App\Models\Country;
|
||||
use App\Models\SofaScoreCategorie;
|
||||
@@ -14,10 +15,12 @@ use Illuminate\Support\Facades\Log;
|
||||
|
||||
class DaysTournament
|
||||
{
|
||||
public static function run(array $days)
|
||||
public static function run()
|
||||
{
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
$days = LoadDays::load();
|
||||
|
||||
$tournaments_counter = 0;
|
||||
|
||||
foreach ($days as $d) {
|
||||
|
||||
@@ -2,39 +2,50 @@
|
||||
|
||||
namespace App\Console\Commands\Grapper\Sofascore;
|
||||
|
||||
use App\Console\Commands\Grapper\Sofascore;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\CurlSofa;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\LoadDays;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\Sleeper;
|
||||
use App\Console\Commands\Nuh;
|
||||
use App\Models\SofaScoreDayTournament;
|
||||
use App\Models\SofaScoreTournament;
|
||||
use App\Models\SofaScoreTaskTournament;
|
||||
use App\Utilities\Notice;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
class Grapper
|
||||
{
|
||||
public static function load(array $days)
|
||||
public static function load()
|
||||
{
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
$force = Nuh::$options['f'] ?? 0;
|
||||
|
||||
foreach ($days as $d) {
|
||||
$task_id = Nuh::$options['task'] ?? 0;
|
||||
|
||||
$langsam = $d['run_slow'];
|
||||
$days = LoadDays::load();
|
||||
|
||||
$sport_id = $d['sport_id'];
|
||||
$active_tournaments = SofaScoreTaskTournament::with('tournament')->where('id', $task_id)->get();
|
||||
|
||||
$day = $d['day'];
|
||||
foreach ($active_tournaments as $tournament) {
|
||||
|
||||
$active_tournaments = SofaScoreTournament::select('name', 'tournament_id')->where('sport_id', $sport_id)->where('enabled', 1)->get();
|
||||
if ($debug) {
|
||||
Notice::note($tournament->tournament->name, 'bg');
|
||||
}
|
||||
|
||||
foreach ($active_tournaments as $tournament) {
|
||||
foreach ($days as $d) {
|
||||
|
||||
$has = SofaScoreDayTournament::where('day', $day)->where('tournament_id', $tournament->tournament_id)->first();
|
||||
$langsam = $d['run_slow'];
|
||||
|
||||
if ($has) {
|
||||
$day = $d['day'];
|
||||
|
||||
$res = SofaScoreDayTournament::whereDate('day','=', $day)->where('tournament_id', $tournament->sofa_score_tournament_id)->first();
|
||||
|
||||
if($res){
|
||||
if ($debug) {
|
||||
Notice::note($day.' - '.$tournament->name.' grapping', 'g');
|
||||
}
|
||||
Notice::note($day, 'g');
|
||||
}
|
||||
|
||||
$url = Nuh::$options['base_url']."api/v1/unique-tournament/$tournament->tournament_id/scheduled-events/$day";
|
||||
$url = Nuh::$options['base_url']."api/v1/unique-tournament/$tournament->sofa_score_tournament_id/scheduled-events/$day";
|
||||
|
||||
Sleeper::rand($langsam);
|
||||
|
||||
@@ -48,9 +59,7 @@ class Grapper
|
||||
|
||||
foreach ($data['events'] as $event) {
|
||||
|
||||
Notice::note($event['season']['name'].' '.$day, 'bb');
|
||||
|
||||
$folder = app_path().self::$storage_path.$day.'/'.$event['tournament']['slug'].'/'.$event['slug'];
|
||||
$folder = app_path().Sofascore::$storage_path.$day.'/'.$event['tournament']['slug'].'/'.$event['slug'];
|
||||
|
||||
File::makeDirectory($folder, 0775, true, true);
|
||||
|
||||
@@ -66,7 +75,7 @@ class Grapper
|
||||
|
||||
$event_id = $event['id'];
|
||||
|
||||
if(!File::file_exists($folder.'/statistics.json')){
|
||||
if(!File::exists($folder.'/statistics.json') || $force){
|
||||
|
||||
$url = Nuh::$options['base_url']."api/v1/event/$event_id/statistics";
|
||||
|
||||
@@ -83,7 +92,7 @@ class Grapper
|
||||
* EVENT lineups
|
||||
*********************************/
|
||||
|
||||
if(!File::file_exists($folder.'/lineups.json')){
|
||||
if(!File::exists($folder.'/lineups.json') || $force){
|
||||
|
||||
$url = Nuh::$options['base_url']."api/v1/event/$event_id/lineups";
|
||||
|
||||
@@ -100,7 +109,7 @@ class Grapper
|
||||
* EVENT odds
|
||||
*********************************/
|
||||
|
||||
if(!File::file_exists($folder.'/odds.json')){
|
||||
if(!File::exists($folder.'/odds.json') || $force){
|
||||
|
||||
$url = Nuh::$options['base_url']."api/v1/event/$event_id/odds/1/all";
|
||||
|
||||
@@ -117,7 +126,7 @@ class Grapper
|
||||
* EVENT incidents
|
||||
*********************************/
|
||||
|
||||
if(!File::file_exists($folder.'/incidents.json')){
|
||||
if(!File::exists($folder.'/incidents.json') || $force){
|
||||
|
||||
$url = Nuh::$options['base_url']."api/v1/event/$event_id/incidents";
|
||||
|
||||
@@ -130,10 +139,7 @@ class Grapper
|
||||
File::put($folder.'/incidents.json', json_encode($data));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($debug) {
|
||||
Notice::note($day.' - '.$tournament->name.' not active', 'r');
|
||||
Notice::note('one day and one tournament done ', 'bb', 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ class CurlSofa
|
||||
{
|
||||
|
||||
public static $testfile = '/Console/Commands/Grapper/Sofascore/test/';
|
||||
|
||||
public static function load(string $url)
|
||||
{
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
@@ -9,9 +9,11 @@ use Illuminate\Support\Carbon;
|
||||
|
||||
class LoadDays
|
||||
{
|
||||
public static function load(int $task_id)
|
||||
public static function load()
|
||||
{
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
$task_id = Nuh::$options['task'] ?? 0;
|
||||
|
||||
$dates = [];
|
||||
|
||||
@@ -20,66 +22,63 @@ class LoadDays
|
||||
return [];
|
||||
}
|
||||
|
||||
$res = SofaScoreTask::with('sport')->where('is_active', 1)->where('id', $task_id)->first();
|
||||
$task = SofaScoreTask::with('sport')->where('id', $task_id)->first();
|
||||
|
||||
if(!$debug){
|
||||
Notice::note('grapper: '.$res->mode.' sport: '.$res->sport_id);
|
||||
Notice::note('grapper: '.$task->mode.' sport: '.$task->sport_id);
|
||||
}
|
||||
|
||||
foreach ($res as $row) {
|
||||
switch ($task->mode) {
|
||||
|
||||
switch ($row->mode) {
|
||||
case 'yesterday':
|
||||
$dates[] = [
|
||||
'day' => Carbon::now()->subDay()->format('Y-m-d'),
|
||||
'slug' => $task->sport->ss_slug,
|
||||
'run_slow' => $task->run_slow,
|
||||
'sport_id' => $task->sport_id,
|
||||
'run_repeatedly' => $task->run_repeatedly,
|
||||
];
|
||||
break;
|
||||
|
||||
case 'yesterday':
|
||||
case 'date':
|
||||
$dates[] = [
|
||||
'day' => self::validateDate($task->day_from),
|
||||
'slug' => $task->sport->ss_slug,
|
||||
'run_slow' => $task->run_slow,
|
||||
'sport_id' => $task->sport_id,
|
||||
'run_repeatedly' => $task->run_repeatedly,
|
||||
];
|
||||
break;
|
||||
|
||||
case 'range':
|
||||
$from = self::validateDate($task->day_from);
|
||||
$to = self::validateDate($task->day_to);
|
||||
|
||||
$from = Carbon::createFromDate($from);
|
||||
$to = Carbon::createFromDate($to);
|
||||
|
||||
$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);
|
||||
}
|
||||
while ($from <= $to) {
|
||||
$dates[] = [
|
||||
'day' => Carbon::now()->subDay()->format('Y-m-d'),
|
||||
'slug' => $row->sport->ss_slug,
|
||||
'run_slow' => $row->run_slow,
|
||||
'sport_id' => $row->sport_id,
|
||||
'run_repeatedly' => $row->run_repeatedly,
|
||||
'day' => $from->format('Y-m-d'),
|
||||
'slug' => $task->sport->ss_slug,
|
||||
'run_slow' => $task->run_slow,
|
||||
'sport_id' => $task->sport_id,
|
||||
'run_repeatedly' => $task->run_repeatedly,
|
||||
];
|
||||
break;
|
||||
$from->addDay();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'date':
|
||||
$dates[] = [
|
||||
'day' => self::validateDate($row->day_from),
|
||||
'slug' => $row->sport->ss_slug,
|
||||
'run_slow' => $row->run_slow,
|
||||
'sport_id' => $row->sport_id,
|
||||
'run_repeatedly' => $row->run_repeatedly,
|
||||
];
|
||||
break;
|
||||
|
||||
case 'range':
|
||||
$from = self::validateDate($row->day_from);
|
||||
$to = self::validateDate($row->day_to);
|
||||
|
||||
$from = Carbon::createFromDate($from);
|
||||
$to = Carbon::createFromDate($to);
|
||||
|
||||
$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);
|
||||
}
|
||||
while ($from < $to) {
|
||||
$dates[] = [
|
||||
'day' => $from->format('Y-m-d'),
|
||||
'slug' => $row->sport->ss_slug,
|
||||
'run_slow' => $row->run_slow,
|
||||
'sport_id' => $row->sport_id,
|
||||
'run_repeatedly' => $row->run_repeatedly,
|
||||
];
|
||||
$from->addDay();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (! $dates) {
|
||||
Notice::note(__FILE__.PHP_EOL.'no dates', 'r', 1);
|
||||
}
|
||||
if (! $dates) {
|
||||
Notice::note(__FILE__.PHP_EOL.'no dates', 'r', 1);
|
||||
}
|
||||
|
||||
// remove when element in array is double (day and slug)
|
||||
|
||||
@@ -2,26 +2,27 @@
|
||||
|
||||
namespace App\Console\Commands\Grapper\Sofascore\Helper;
|
||||
|
||||
use App\Console\Commands\Nuh;
|
||||
use App\Models\SofaScoreTask;
|
||||
use App\Utilities\Notice;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class TaskConfig
|
||||
{
|
||||
public static function set(int $task_id)
|
||||
public static function start()
|
||||
{
|
||||
if(!$task_id){
|
||||
Notice::note('no task id', 'br');
|
||||
return [];
|
||||
}
|
||||
|
||||
$task_id = (int) Nuh::$options['task'] ?? 0;
|
||||
SofaScoreTask::find($task_id)->update(['last_start' => Carbon::now()]);
|
||||
}
|
||||
|
||||
public static function end()
|
||||
{
|
||||
$task_id = Nuh::$options['task'] ?? 0;
|
||||
$res = SofaScoreTask::with('sport')->where('id', $task_id)->first();
|
||||
|
||||
if($res->run_repeatedly){
|
||||
SofaScoreTask::query()->where('id', $task_id)->update(['compleated' => 1]);
|
||||
SofaScoreTask::query()->where('id', $task_id)->update(['compleated' => 1, 'is_active' => 1, 'last_end' => Carbon::now()]);
|
||||
}
|
||||
else {
|
||||
SofaScoreTask::query()->where('id', $task_id)->update(['compleated' => 1, 'is_active' => 0, 'last_end' => Carbon::now()->format('Y-m-d')]);
|
||||
SofaScoreTask::query()->where('id', $task_id)->update(['compleated' => 1, 'is_active' => 0, 'last_end' => Carbon::now()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,19 @@
|
||||
namespace App\Console\Commands\Grapper\Sofascore;
|
||||
|
||||
use App\Console\Commands\Grapper\Sofascore;
|
||||
use App\Console\Commands\Grapper\Sofascore\Helper\LoadDays;
|
||||
use App\Console\Commands\Nuh;
|
||||
use App\Utilities\Notice;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class SendMail
|
||||
{
|
||||
public static function run(array $days)
|
||||
public static function run()
|
||||
{
|
||||
$task = Nuh::$options['task'] ?? 0;
|
||||
|
||||
$days = LoadDays::load($task);
|
||||
|
||||
foreach ($days as $d) {
|
||||
|
||||
$day = $d['day'];
|
||||
|
||||
@@ -13,9 +13,9 @@ class SettingsToLocal
|
||||
public static function run()
|
||||
{
|
||||
$debug = Nuh::$options['d'] ?? 0;
|
||||
|
||||
|
||||
if ($debug) {
|
||||
Notice::note('copy settings to local', 'bb');
|
||||
Notice::note('Settings To Local', 'bb');
|
||||
}
|
||||
|
||||
SofaScoreTask::truncate();
|
||||
|
||||
@@ -23,7 +23,7 @@ class Nuh extends Command
|
||||
|
||||
public static $id = 0;
|
||||
|
||||
protected $signature = 'nuh {process=help} {--truncate} {--grps=0} {--days=0} {--day=0} {--id=0} {--run=0} {--fn=} {--gid=} {--p} {--d} {--x} {--t} {--y} {--m} {--l} {--w} {--a} {--r} {--s} {--g} {--t} {--q} {--f} {--b} {--e} {--z}';
|
||||
protected $signature = 'nuh {process=help} {--truncate} {--id=0} {--fun=} {--task=0} {--gid=} {--p} {--d} {--x} {--t} {--y} {--m} {--l} {--w} {--a} {--r} {--s} {--g} {--t} {--q} {--f} {--b} {--e} {--z}';
|
||||
|
||||
public function handle()
|
||||
{
|
||||
@@ -41,13 +41,13 @@ class Nuh extends Command
|
||||
$txt .= '-----------------------------------------------------------' . PHP_EOL;
|
||||
$txt .= 'process [id] (required)' . PHP_EOL;
|
||||
$txt .= '--id=matchid (optional) calling spezific id' . PHP_EOL;
|
||||
$txt .= '--fn=name (optional) [bkms, markets]' . PHP_EOL;
|
||||
$txt .= '--fun=name (optional) [bkms, markets]' . PHP_EOL;
|
||||
$txt .= '--gid=groupid (optional) [bkms, groupid]' . PHP_EOL;
|
||||
$txt .= '--truncate (optional)' . PHP_EOL;
|
||||
$txt .= '-----------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
$txt .= 'Sofascore (67)' . PHP_EOL;
|
||||
$txt .= '-----------------------------------------------------------' . PHP_EOL;
|
||||
$txt .= '--run=[1,2,3,4,5,6,7]'
|
||||
$txt .= '--fun=[1,2,3,4,5,6,7]'
|
||||
.PHP_EOL.chr(9).'1) player/season'
|
||||
.PHP_EOL.chr(9).'2) setting to local'
|
||||
.PHP_EOL.chr(9).'3) create zip'
|
||||
|
||||
+1
-3
@@ -4,9 +4,7 @@ namespace App\Filament\Clusters\StaticData\Resources\SofaScoreTasks\Tables;
|
||||
|
||||
use App\Filament\Clusters\StaticData\Resources\SofaScoreTasks\RelationManagers\SofaScoreTaskTournamentsRelationManager;
|
||||
use App\Models\SofaScoreTask;
|
||||
use Filament\Actions\DeleteAction;
|
||||
use Filament\Actions\EditAction;
|
||||
use Filament\Schemas\Components\Utilities\Set;
|
||||
use Filament\Tables\Columns\IconColumn;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Columns\ToggleColumn;
|
||||
@@ -53,6 +51,7 @@ class SofaScoreTasksTable
|
||||
}),
|
||||
ToggleColumn::make('run_slow')->alignCenter(),
|
||||
ToggleColumn::make('run_repeatedly')->alignCenter(),
|
||||
TextColumn::make('duration'),
|
||||
])
|
||||
->filters([
|
||||
//
|
||||
@@ -66,7 +65,6 @@ class SofaScoreTasksTable
|
||||
->compact(),
|
||||
EditAction::make()->iconButton()
|
||||
->icon('phosphor-pen-fill'),
|
||||
// DeleteAction::make()->iconButton(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,12 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class SofaScoreTask extends Model
|
||||
{
|
||||
protected $appends = ['duration'];
|
||||
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'mode',
|
||||
@@ -20,6 +23,11 @@ class SofaScoreTask extends Model
|
||||
'last_end',
|
||||
];
|
||||
|
||||
public function getDurationAttribute(): string
|
||||
{
|
||||
return Carbon::parse($this->last_start)->diff(Carbon::parse($this->last_end));
|
||||
}
|
||||
|
||||
public function sport()
|
||||
{
|
||||
return $this->belongsTo(Sport::class);
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"eventState":[],"tournament":{"name":"Chinese Super League","slug":"chinese-super-league","category":{"name":"China","slug":"china","sport":{"name":"Football","slug":"football","id":1},"priority":0,"country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":99,"flag":"china","alpha2":"CN","fieldTranslations":{"nameTranslation":{"ar":"\u0627\u0644\u0635\u064a\u0646","ru":"\u041a\u0438\u0442\u0430\u0439"},"shortNameTranslation":[]}},"uniqueTournament":{"name":"Chinese Super League","slug":"cfa-super-league","primaryColorHex":"#f16327","secondaryColorHex":"#bc0416","category":{"name":"China","slug":"china","sport":{"name":"Football","slug":"football","id":1},"priority":0,"country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":99,"flag":"china","alpha2":"CN","fieldTranslations":{"nameTranslation":{"ar":"\u0627\u0644\u0635\u064a\u0646","ru":"\u041a\u0438\u0442\u0430\u0439"},"shortNameTranslation":[]}},"userCount":18399,"hasPerformanceGraphFeature":false,"country":[],"id":649,"hasEventPlayerStatistics":true,"displayInverseHomeAwayTeams":false,"fieldTranslations":{"nameTranslation":{"ar":"\u0627\u0644\u062f\u0648\u0631\u064a \u0627\u0644\u0635\u064a\u0646\u064a \u0627\u0644\u0645\u0645\u062a\u0627\u0632","bn":"\u099a\u09be\u0987\u09a8\u09bf\u099c \u09b8\u09c1\u09aa\u09be\u09b0 \u09b2\u09c0\u0997","hi":"\u091a\u093e\u0907\u0928\u0940\u091c\u093c \u0938\u0941\u092a\u0930 \u0932\u0940\u0917","ru":"\u0421\u0443\u043f\u0435\u0440\u043b\u0438\u0433\u0430 \u041a\u0438\u0442\u0430\u044f"},"shortNameTranslation":[]}},"priority":314,"isGroup":false,"isLive":false,"id":652,"fieldTranslations":{"nameTranslation":{"ar":"\u0627\u0644\u062f\u0648\u0631\u064a \u0627\u0644\u0635\u064a\u0646\u064a \u0627\u0644\u0645\u0645\u062a\u0627\u0632","bn":"\u099a\u09be\u0987\u09a8\u09bf\u099c \u09b8\u09c1\u09aa\u09be\u09b0 \u09b2\u09c0\u0997","hi":"\u091a\u093e\u0907\u0928\u0940\u095b \u0938\u0941\u092a\u0930 \u0932\u0940\u0917","ru":"\u0421\u0443\u043f\u0435\u0440\u043b\u0438\u0433\u0430 \u041a\u0438\u0442\u0430\u044f"},"shortNameTranslation":[]}},"season":{"name":"Chinese Super League 2026","year":"2026","editor":false,"id":90049},"roundInfo":{"round":16},"customId":"VTnsQZOd","status":{"code":100,"description":"Ended","type":"finished"},"winnerCode":1,"venue":{"city":{"name":"Qingdao","country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":30433},"venueCoordinates":{"latitude":120.36939,"longitude":36.06605},"hidden":true,"slug":"qingdao-youth-football-stadium","name":"Qingdao Youth Football Stadium","capacity":50000,"country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":39712,"fieldTranslations":{"nameTranslation":{"ar":"\u0645\u0644\u0639\u0628 \u062a\u0634\u064a\u0646\u063a\u062f\u0627\u0648 \u0644\u0644\u0634\u0628\u0627\u0628 \u0644\u0643\u0631\u0629 \u0627\u0644\u0642\u062f\u0645","hi":"\u0915\u093c\u093f\u0902\u0917\u0926\u093e\u0913 \u092f\u0941\u0925 \u092b\u0941\u091f\u092c\u0949\u0932 \u0938\u094d\u091f\u0947\u0921\u093f\u092f\u092e","bn":"\u0995\u09bf\u0982\u09a1\u09be\u0993 \u0987\u09df\u09c1\u09a5 \u09ab\u09c1\u099f\u09ac\u09b2 \u09b8\u09cd\u099f\u09c7\u09a1\u09bf\u09af\u09bc\u09be\u09ae"},"shortNameTranslation":[]},"stadium":{"name":"Qingdao Youth Football Stadium","capacity":50000}},"homeTeam":{"name":"Qingdao Hainiu","slug":"qingdao-hainiu","shortName":"Hainiu","gender":"M","sport":{"name":"Football","slug":"football","id":1},"userCount":7779,"nameCode":"QIN","disabled":false,"national":false,"type":0,"country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":34695,"subTeams":[],"teamColors":{"primary":"#ffffff","secondary":"#f85000","text":"#f85000"},"fieldTranslations":{"nameTranslation":{"ar":"\u062a\u0634\u064a\u0646\u063a\u062f\u0627\u0648 \u0647\u0627\u064a\u0646\u064a\u064a\u0648","ru":"\u0426\u0438\u043d\u0434\u0430\u043e \u041c\u0430\u043d\u0430\u0442\u0438"},"shortNameTranslation":{"ar":"\u0647\u0627\u064a\u0646\u064a\u064a\u0648"}}},"awayTeam":{"name":"Yunnan Yukun","slug":"yunnan-yukun","shortName":"Yukun","gender":"M","sport":{"name":"Football","slug":"football","id":1},"userCount":9177,"nameCode":"YUN","disabled":false,"national":false,"type":0,"country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":474991,"subTeams":[],"teamColors":{"primary":"#374df5","secondary":"#374df5","text":"#ffffff"},"fieldTranslations":{"nameTranslation":{"ar":"\u064a\u0648\u0646\u0627\u0646 \u064a\u0648\u0643\u064a\u0646","ru":"\u042e\u043d\u044c\u043d\u0430\u043d\u044c \u042e\u043a\u0443\u043d"},"shortNameTranslation":{"ar":"\u064a\u0648\u0646\u0627\u0646 \u064a\u0648\u0643\u064a\u0646","ru":"\u042e\u043a\u0443\u043d"}}},"homeScore":{"current":4,"display":4,"period1":4,"period2":0,"normaltime":4},"awayScore":{"current":2,"display":2,"period1":2,"period2":0,"normaltime":2},"time":{"injuryTime1":6,"injuryTime2":9,"currentPeriodStartTimestamp":1782477684},"changes":{"changes":["status.code","status.description","statusLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"incidents":[{"text":"FT","homeScore":4,"awayScore":2,"isLive":false,"time":90,"addedTime":999,"timeSeconds":5400,"reversedPeriodTime":1,"reversedPeriodTimeSeconds":0,"periodTimeSeconds":2700,"incidentType":"period"},{"player":{"name":"Pengfei Mu","slug":"pengfei-mou","shortName":"P. Mu","position":"G","jerseyNumber":"28","height":193,"userCount":10,"gender":"M","id":834786,"marketValueCurrency":"EUR","dateOfBirthTimestamp":604627200,"proposedMarketValueRaw":{"value":26000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0628\u064a\u0646\u063a\u0641\u064a \u0645\u0648","ru":"\u041f\u044d\u043d\u0444\u044d\u0439 \u041c\u0443"},"shortNameTranslation":{"ar":"\u0628. \u0645\u0648","ru":"\u041f. \u041c\u0443"}}},"playerName":"Pengfei Mu","reason":"Time wasting","rescinded":false,"id":125311276,"time":90,"addedTime":2,"isHome":true,"incidentClass":"yellow","reversedPeriodTime":1,"incidentType":"card"},{"length":9,"time":90,"addedTime":0,"reversedPeriodTime":1,"incidentType":"injuryTime"},{"player":{"name":"Zichang Huang","slug":"zichang-huang","shortName":"Z. Huang","position":"D","jerseyNumber":"19","height":170,"userCount":44,"gender":"M","id":873898,"marketValueCurrency":"EUR","dateOfBirthTimestamp":860112000,"proposedMarketValueRaw":{"value":210000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0632\u064a\u0634\u0627\u0646\u063a \u0647\u0648\u0627\u0646\u063a","ru":"\u0426\u0437\u0438\u0447\u0430\u043d \u0425\u0443\u0430\u043d"},"shortNameTranslation":{"ar":"\u0632. \u0647\u0648\u0627\u0646\u063a","ru":"\u0426. \u0425\u0443\u0430\u043d"}}},"playerName":"Zichang Huang","reason":"Foul","rescinded":false,"id":125311274,"time":89,"isHome":false,"incidentClass":"yellow","reversedPeriodTime":2,"incidentType":"card"},{"playerIn":{"name":"Zilong Han","slug":"zilong-han","shortName":"Z. Han","position":"M","jerseyNumber":"27","height":181,"userCount":9,"id":928157,"marketValueCurrency":"EUR","dateOfBirthTimestamp":765504000,"proposedMarketValueRaw":{"value":81000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0632\u064a\u0644\u0648\u0646\u063a \u0647\u0627\u0646","ru":"\u0417\u0438\u043b\u043e\u043d\u0433 \u0425\u0430\u043d"},"shortNameTranslation":{"ar":"\u0632. \u0647\u0627\u0646","ru":"\u0417. \u0425\u0430\u043d"}}},"playerOut":{"name":"Chugui Ye","slug":"chugui-ye","shortName":"C. Ye","position":"M","jerseyNumber":"7","height":178,"userCount":24,"gender":"M","id":792267,"marketValueCurrency":"EUR","dateOfBirthTimestamp":778982400,"proposedMarketValueRaw":{"value":92000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u064a\u064a\u060c \u062a\u0634\u0648\u063a\u0648\u064a","ru":"\u0415 \u0427\u0443\u0433\u0443\u0439"},"shortNameTranslation":{"ar":"\u062a. \u064a\u064a","ru":"\u0415. \u0427\u0443\u0433\u0443\u0439"}}},"id":126427453,"time":85,"injury":false,"isHome":false,"incidentClass":"regular","reversedPeriodTime":6,"incidentType":"substitution"},{"playerIn":{"name":"Liu Guobao","firstName":"Liu Guobao","lastName":"","slug":"liu-guobao","shortName":"L. Guobao","position":"F","jerseyNumber":"21","height":180,"userCount":11,"gender":"M","id":1210256,"marketValueCurrency":"EUR","dateOfBirthTimestamp":1051660800,"proposedMarketValueRaw":{"value":26000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0644\u064a\u0648 \u0642\u0648\u0628\u0627\u0648","ru":"\u041b\u044e \u0413\u0443\u043e\u0431\u0430\u043e"},"shortNameTranslation":{"ar":"\u0644. \u0642\u0648\u0628\u0627\u0648","ru":"\u041b. \u0413\u0443\u043e\u0431\u0430\u043e"}}},"playerOut":{"name":"Ahmed El Messaoudi","slug":"ahmed-el-messaoudi","shortName":"A. E. Messaoudi","position":"M","jerseyNumber":"11","height":182,"userCount":174,"gender":"M","id":369798,"marketValueCurrency":"EUR","dateOfBirthTimestamp":807408000,"proposedMarketValueRaw":{"value":635000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0623\u062d\u0645\u062f \u0627\u0644\u0645\u0633\u0639\u0648\u062f\u064a","ru":"\u0410\u0445\u043c\u0435\u0434 \u042d\u043b\u044c \u041c\u0435\u0441\u0441\u0430\u0443\u0434\u0438"},"shortNameTranslation":{"ar":"\u0623. \u0627\u0644\u0645\u0633\u0639\u0648\u062f\u064a","ru":"\u0410. \u041c\u0435\u0441\u0441\u0430\u0443\u0434\u0438"}}},"id":126427450,"time":77,"injury":true,"isHome":true,"incidentClass":"injury","reversedPeriodTime":14,"incidentType":"substitution"},{"playerIn":{"name":"Hailong Li","slug":"hailong-li","shortName":"H. Li","position":"D","jerseyNumber":"16","height":181,"userCount":2,"gender":"M","id":844572,"marketValueCurrency":"EUR","dateOfBirthTimestamp":838944000,"proposedMarketValueRaw":{"value":72000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0644\u064a\u060c \u0647\u0627\u064a\u0644\u0648\u0646\u063a","ru":"\u041b\u0438, \u0425\u0430\u0439\u043b\u043e\u043d\u0433"},"shortNameTranslation":{"ar":"\u0647. \u0644\u064a","ru":"\u0425. \u041b\u0438"}}},"playerOut":{"name":"Qiao Wang","slug":"qiao-wang","shortName":"Q. WLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"confirmed":true,"home":{"players":[{"player":{"name":"Pengfei Mu","slug":"pengfei-mou","shortName":"P. Mu","position":"G","jerseyNumber":"28","height":193,"userCount":10,"gender":"M","sofascoreId":"rkv62m","country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":834786,"marketValueCurrency":"EUR","dateOfBirthTimestamp":604627200,"proposedMarketValueRaw":{"value":26000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u0628\u064a\u0646\u063a\u0641\u064a \u0645\u0648","ru":"\u041f\u044d\u043d\u0444\u044d\u0439 \u041c\u0443"},"shortNameTranslation":{"ar":"\u0628. \u0645\u0648","ru":"\u041f. \u041c\u0443"}}},"teamId":34695,"shirtNumber":28,"jerseyNumber":"28","position":"G","substitute":false,"statistics":{"totalPass":21,"accuratePass":13,"totalLongBalls":13,"accurateLongBalls":5,"goalAssist":0,"accurateOwnHalfPasses":12,"totalOwnHalfPasses":15,"accurateOppositionHalfPasses":1,"totalOppositionHalfPasses":6,"duelWon":2,"ballRecovery":7,"totalTackle":1,"wonTackle":1,"wasFouled":1,"goodHighClaim":2,"savedShotsFromInsideTheBox":1,"saves":2,"totalKeeperSweeper":1,"accurateKeeperSweeper":1,"minutesPlayed":90,"touches":29,"rating":6.4,"possessionLostCtrl":8,"totalBallCarriesDistance":35.480422258309,"ballCarriesCount":6,"totalProgression":0.39775361865624,"progressiveBallCarriesCount":0,"keeperSaveValue":0.0003,"ratingVersions":{"original":6.4,"alternative":6.9},"totalShots":0,"passValueNormalized":0.03,"dribbleValueNormalized":0,"defensiveValueNormalized":-0.07,"goalkeeperValueNormalized":-0.63,"statisticsType":{"sportSlug":"football","statisticsType":"player"}}},{"player":{"name":"Qiao Wang","slug":"qiao-wang","shortName":"Q. Wang","position":"D","jerseyNumber":"17","height":170,"userCount":1,"gender":"M","sofascoreId":"ihiqne","country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":833755,"marketValueCurrency":"EUR","dateOfBirthTimestamp":811555200,"proposedMarketValueRaw":{"value":78000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u062a\u0634\u064a\u0627\u0648 \u0648\u0627\u0646\u063a","ru":"\u0426\u044f\u043e \u0412\u0430\u043d"},"shortNameTranslation":{"ar":"\u062a. \u0648\u0627\u0646\u063a","ru":"\u0426. \u0412\u0430\u043d"}}},"teamId":34695,"shirtNumber":17,"jerseyNumber":"17","position":"D","substitute":false,"statistics":{"totalPass":26,"accuratePass":24,"totalLongBalls":2,"accurateLongBalls":1,"goalAssist":0,"accurateOwnHalfPasses":10,"totalOwnHalfPasses":12,"accurateOppositionHalfPasses":14,"totalOppositionHalfPasses":14,"totalCross":6,"accurateCross":1,"duelLost":4,"duelWon":4,"challengeLost":2,"totalContest":1,"wonContest":1,"totalClearance":1,"outfielderBlock":2,"ballRecovery":3,"totalTackle":3,"wonTackle":2,"unsuccessfulTouch":2,"fouls":2,"minutesPlayed":73,"touches":47,"rating":6.5,"possessionLostCtrl":10,"totalBallCarriesDistance":110.88025341816,"ballCarriesCount":18,"totalProgression":16.681954768051,"bestBallCarryProgression":13.52742624452,"totalProgressiveBallCarriesDistance":19.896311442074,"progressiveBallCarriesCount":1,"ratingVersions":{"original":6.5,"alternative":6.8},"totalShots":0,"passValueNormalized":0.02,"dribbleValueNormalized":-0.19,"defensiveValueNormalized":-0.23,"statisticsType":{"sportSlug":"football","statisticsType":"player"}}},{"player":{"name":"Yangyang Jin","firstName":"","lastName":"","slug":"yangyang-jin","shortName":"Y. Jin","position":"D","jerseyNumber":"4","height":192,"userCount":4,"gender":"M","sofascoreId":"vk2rys","country":{"alpha2":"CN","alpha3":"CHN","name":"China","slug":"china"},"id":790827,"marketValueCurrency":"EUR","dateOfBirthTimestamp":728697600,"proposedMarketValueRaw":{"value":52000,"currency":"EUR"},"fieldTranslations":{"nameTranslation":{"ar":"\u064a\u0627\u0646\u063a \u064a\u0627\u0646\u063a \u062c\u064a\u0646","ru":"\u042f\u043d\u0446\u0437\u044f\u043d\u044c \u0426\u0437\u0438\u043d\u044c"},"shortNameTranslation":{"ar":"\u064a. \u062c\u064a\u0646","ru":"\u042f. \u0426\u0437\u0438\u043d\u044c"}}},"teamId":34695,"shirtNumber":4,"jerseyNumber":"4","position":"D","substitute":false,"statistics":{"totalPass":49,"accuratePass":41,"totalLongBalls":14,"accurateLongBalls":9,"goalAssist":0,"accurateOwnHalfPasses":26,"totalOwnHalfPasses":29,"accurateOppositionHalfPasses":15,"totalOppositionHalfPasses":20,"aerialLost":2,"duelLost":3,"duelWon":3,"totalClearance":7,"interceptionWon":3,"ballRecovery":7,"totalTackle":3,"wonTackle":1,"unsuccessfulTouch":1,"fouls":1,"minutesPlayed":90,"touches":65,"rating":7,"possessionLostCtrl":9,"totalBallCarriesDistance":195.39992077268,"ballCarriesCount":28,"totalProgression":27.126234293721,"progressiveBallCarriesCount":0,"ratingVersions":{"original":7,"alternative":7},"totalShots":0,"passValueNormalized":0.26,"dribbleValueNormalized":0.2,"defensiveValueNormalized":-0.09,"statisticsType":{"sportSlug":"football","statisticsType":"player"}}},{"player":{"name":"Nemanja An\u0111elkovi\u0107","firstName":"","lastName":"","slug":"nemanja-andelkovic","shortNamLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"markets":[{"sourceId":195608390,"structureType":1,"marketId":1,"marketName":"Full time","isLive":false,"fid":195608390,"suspended":false,"id":322374071,"marketGroup":"1X2","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"29\/20","fractionalValue":"91\/50","sourceId":1416209919,"name":"1","winning":true,"change":1},{"initialFractionalValue":"13\/5","fractionalValue":"11\/4","sourceId":1416209920,"name":"X","winning":false,"change":1},{"initialFractionalValue":"29\/20","fractionalValue":"5\/4","sourceId":1416209921,"name":"2","winning":false,"change":-1}]},{"sourceId":195608390,"structureType":1,"marketId":2,"marketName":"Double chance","isLive":false,"fid":195608390,"suspended":false,"id":327573176,"marketGroup":"Double chance","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"1\/2","fractionalValue":"4\/7","sourceId":1416337608,"name":"1X","winning":true,"change":1},{"initialFractionalValue":"1\/2","fractionalValue":"2\/5","sourceId":1416337586,"name":"X2","winning":false,"change":-1},{"initialFractionalValue":"2\/7","fractionalValue":"1\/4","sourceId":1416337606,"name":"12","winning":true,"change":-1}]},{"sourceId":195608390,"structureType":1,"marketId":3,"marketName":"1st half","isLive":false,"fid":195608390,"suspended":false,"id":327573177,"marketGroup":"1X2","marketPeriod":"1st half","choices":[{"initialFractionalValue":"2\/1","fractionalValue":"11\/5","sourceId":1416337554,"name":"1","winning":true,"change":1},{"initialFractionalValue":"7\/5","fractionalValue":"7\/5","sourceId":1416337560,"name":"X","winning":false,"change":0},{"initialFractionalValue":"2\/1","fractionalValue":"7\/4","sourceId":1416337565,"name":"2","winning":false,"change":-1}]},{"sourceId":195608390,"structureType":1,"marketId":4,"marketName":"Draw no bet","isLive":false,"fid":195608390,"suspended":false,"id":327573178,"marketGroup":"Draw no bet","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"5\/6","fractionalValue":"11\/10","sourceId":1416337927,"name":"1","winning":true,"change":1},{"initialFractionalValue":"5\/6","fractionalValue":"4\/6","sourceId":1416337935,"name":"2","winning":false,"change":-1}]},{"sourceId":195608390,"structureType":1,"marketId":5,"marketName":"Both teams to score","isLive":false,"fid":195608390,"suspended":false,"id":327573179,"marketGroup":"Both teams to score","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"1\/2","fractionalValue":"1\/2","sourceId":1416362279,"name":"Yes","winning":true,"change":0},{"initialFractionalValue":"6\/4","fractionalValue":"6\/4","sourceId":1416362280,"name":"No","winning":false,"change":0}]},{"sourceId":195608390,"structureType":2,"marketId":9,"marketName":"Match goals","choiceGroup":"0.5","isLive":false,"fid":195608390,"suspended":false,"id":327573189,"marketGroup":"Match goals","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"1\/40","fractionalValue":"1\/40","sourceId":1416362298,"name":"Over","winning":true,"change":0},{"initialFractionalValue":"16\/1","fractionalValue":"16\/1","sourceId":1416362310,"name":"Under","winning":false,"change":0}]},{"sourceId":195608390,"structureType":2,"marketId":9,"marketName":"Match goals","choiceGroup":"1.5","isLive":false,"fid":195608390,"suspended":false,"id":327573188,"marketGroup":"Match goals","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"1\/6","fractionalValue":"1\/6","sourceId":1416362315,"name":"Over","winning":true,"change":0},{"initialFractionalValue":"4\/1","fractionalValue":"4\/1","sourceId":1416362306,"name":"Under","winning":false,"change":0}]},{"sourceId":195608390,"structureType":2,"marketId":9,"marketName":"Match goals","choiceGroup":"2.5","isLive":false,"fid":195608390,"suspended":false,"id":327573182,"marketGroup":"Match goals","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"7\/5","fractionalValue":"8\/15","sourceId":1416209922,"name":"Over","winning":true,"change":-1},{"initialFractionalValue":"8\/15","fractionalValue":"7\/5","sourceId":1416209923,"name":"Under","winning":false,"change":1}]},{"sourceId":195608390,"structureType":2,"marketId":9,"marketName":"Match goals","choiceGroup":"3.5","isLive":false,"fid":195608390,"suspended":false,"id":327573187,"marketGroup":"Match goals","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"5\/4","fractionalValue":"5\/4","sourceId":1416362302,"name":"Over","winning":true,"change":0},{"initialFractionalValue":"4\/7","fractionalValue":"4\/7","sourceId":1416362319,"name":"Under","winning":false,"change":0}]},{"sourceId":195608390,"structureType":2,"marketId":9,"marketName":"Match goals","choiceGroup":"4.5","isLive":false,"fid":195608390,"suspended":false,"id":327573186,"marketGroup":"Match goals","marketPeriod":"Full-time","choices":[{"initialFractionalValue":"3\/1","fractionalValue":"3\/1","sourceId":1416362321,"name":"Over","winning":true,"change":0},{"initialFractionalValue":"2\/9","fractionalValue":"2\/9","sourceId":1416362307,"name":"Under","winning"Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"statistics":[{"period":"ALL","groups":[{"groupName":"Match overview","statisticsItems":[{"name":"Ball possession","home":"47%","away":"53%","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":47,"awayValue":53,"renderType":2,"key":"ballPossession"},{"name":"Expected goals","home":"2.15","away":"2.57","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":2.15,"awayValue":2.57,"renderType":1,"key":"expectedGoals"},{"name":"Big chances","home":"3","away":"3","compareCode":3,"statisticsType":"positive","valueType":"event","homeValue":3,"awayValue":3,"renderType":1,"key":"bigChanceCreated"},{"name":"Total shots","home":"8","away":"20","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":8,"awayValue":20,"renderType":1,"key":"totalShotsOnGoal"},{"name":"Goalkeeper saves","home":"2","away":"2","compareCode":3,"statisticsType":"positive","valueType":"event","homeValue":2,"awayValue":2,"renderType":1,"key":"goalkeeperSaves"},{"name":"Corner kicks","home":"2","away":"4","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":2,"awayValue":4,"renderType":1,"key":"cornerKicks"},{"name":"Fouls","home":"15","away":"14","compareCode":1,"statisticsType":"negative","valueType":"event","homeValue":15,"awayValue":14,"renderType":1,"key":"fouls"},{"name":"Passes","home":"374","away":"408","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":374,"awayValue":408,"renderType":1,"key":"passes"},{"name":"Tackles","home":"23","away":"19","compareCode":1,"statisticsType":"positive","valueType":"event","homeValue":23,"awayValue":19,"renderType":1,"key":"totalTackle"},{"name":"Free kicks","home":"14","away":"15","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":14,"awayValue":15,"renderType":1,"key":"freeKicks"},{"name":"Yellow cards","home":"4","away":"2","compareCode":1,"statisticsType":"negative","valueType":"event","homeValue":4,"awayValue":2,"renderType":1,"key":"yellowCards"}]},{"groupName":"Shots","statisticsItems":[{"name":"Total shots","home":"8","away":"20","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":8,"awayValue":20,"renderType":1,"key":"totalShotsOnGoal"},{"name":"Shots on target","home":"6","away":"4","compareCode":1,"statisticsType":"positive","valueType":"event","homeValue":6,"awayValue":4,"renderType":1,"key":"shotsOnGoal"},{"name":"Hit woodwork","home":"0","away":"0","compareCode":3,"statisticsType":"negative","valueType":"event","homeValue":0,"awayValue":0,"renderType":1,"key":"hitWoodwork"},{"name":"Shots off target","home":"1","away":"9","compareCode":2,"statisticsType":"negative","valueType":"event","homeValue":1,"awayValue":9,"renderType":1,"key":"shotsOffGoal"},{"name":"Blocked shots","home":"1","away":"7","compareCode":2,"statisticsType":"negative","valueType":"event","homeValue":1,"awayValue":7,"renderType":1,"key":"blockedScoringAttempt"},{"name":"Shots inside box","home":"6","away":"15","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":6,"awayValue":15,"renderType":1,"key":"totalShotsInsideBox"},{"name":"Shots outside box","home":"2","away":"5","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":2,"awayValue":5,"renderType":1,"key":"totalShotsOutsideBox"}]},{"groupName":"Attack","statisticsItems":[{"name":"Big chances scored","home":"3","away":"1","compareCode":1,"statisticsType":"positive","valueType":"event","homeValue":3,"awayValue":1,"renderType":1,"key":"bigChanceScored"},{"name":"Big chances missed","home":"0","away":"2","compareCode":2,"statisticsType":"negative","valueType":"event","homeValue":0,"awayValue":2,"renderType":1,"key":"bigChanceMissed"},{"name":"Touches in penalty area","home":"25","away":"34","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":25,"awayValue":34,"renderType":1,"key":"touchesInOppBox"},{"name":"Fouled in final third","home":"0","away":"3","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":0,"awayValue":3,"renderType":1,"key":"fouledFinalThird"},{"name":"Offsides","home":"2","away":"2","compareCode":3,"statisticsType":"negative","valueType":"event","homeValue":2,"awayValue":2,"renderType":1,"key":"offsides"}]},{"groupName":"Passes","statisticsItems":[{"name":"Accurate passes","home":"308","away":"339","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":308,"awayValue":339,"renderType":1,"key":"accuratePasses"},{"name":"Throw-ins","home":"16","away":"26","compareCode":2,"statisticsType":"positive","valueType":"event","homeValue":16,"awayValue":26,"renderType":1,"key":"throwIns"},{"name":"Final third entries","home":"47","away":"47","compareCode":3,"statisticsType":"positive","valueType":"event","homeValue":47,"awayValue":47,"renderType":1,"key":"finalThirdEntries"},{"name":"Final third phase","home":"82\/111 (74%)","away":"74\/118 (63%)","compareCode":1,"statisticsType":"positive","valLine truncated
|
||||
+33
-26
@@ -8,22 +8,22 @@ case "$1" in
|
||||
ssh -f -N -L 13306:127.0.0.1:3306 -p 58371 root@162.55.242.190
|
||||
|
||||
echo "\n⚽ copy active tournaments"
|
||||
php artisan nuh --d --f 67 --run=2 --task=1
|
||||
php artisan nuh --d --f 67 --fun=2 --task=1
|
||||
|
||||
echo "\n⚽ close tunnel"
|
||||
killall ssh
|
||||
|
||||
echo "\n⚽ grap avilable tournaments for given days"
|
||||
php artisan nuh --d --f 67 --run=5 --task=1
|
||||
php artisan nuh --d --f 67 --fun=5 --task=1
|
||||
|
||||
echo "\n⚽ grapp data sofascore"
|
||||
php artisan nuh --d --f 67 --run=6 --task=1
|
||||
php artisan nuh --d --f 67 --fun=6 --task=1
|
||||
|
||||
echo "\n⚽ create zip archive"
|
||||
php artisan nuh --d --f 67 --run=3 --task=1
|
||||
php artisan nuh --d --f 67 --fun=3 --task=1
|
||||
|
||||
echo "\n⚽ mail archive"
|
||||
php artisan nuh --d --f 67 --run=4 --task=1
|
||||
php artisan nuh --d --f 67 --fun=4 --task=1
|
||||
|
||||
echo "\n😎 done :)"
|
||||
;;
|
||||
@@ -31,38 +31,45 @@ case "$1" in
|
||||
# AUTO GRAPPER SOFASCORE (production no debug and 10s breaks)
|
||||
killall ssh
|
||||
ssh -f -N -L 13306:127.0.0.1:3306 -p 58371 root@162.55.242.190
|
||||
php artisan nuh --f 67 --run=2 --task=1
|
||||
php artisan nuh --f 67 --fun=2 --task=1
|
||||
killall ssh
|
||||
php artisan nuh --f 67 --run=5 --task=1
|
||||
php artisan nuh --f 67 --run=6 --task=1
|
||||
php artisan nuh --f 67 --run=3 --task=1
|
||||
php artisan nuh --f 67 --run=4 --task=1
|
||||
php artisan nuh --f 67 --fun=5 --task=1
|
||||
php artisan nuh --f 67 --fun=6 --task=1
|
||||
php artisan nuh --f 67 --fun=3 --task=1
|
||||
php artisan nuh --f 67 --fun=4 --task=1
|
||||
;;
|
||||
"3")
|
||||
# AUTO GRAPPER SOFASCORE (debug)
|
||||
echo "\n⚽ close all open vpn"
|
||||
killall ssh
|
||||
|
||||
echo "\n⚽ open vpn tunnel to prod"
|
||||
ssh -f -N -L 13306:127.0.0.1:3306 -p 58371 root@162.55.242.190
|
||||
# echo "\n⚽ close all vpn"
|
||||
# killall ssh
|
||||
|
||||
echo "\n⚽ copy active tournaments"
|
||||
php artisan nuh --d --f 67 --run=2 --task=2
|
||||
# echo "\n⚽ open vpn"
|
||||
# ssh -f -N -L 13306:127.0.0.1:3306 -p 58371 root@162.55.242.190
|
||||
|
||||
echo "\n⚽ close tunnel"
|
||||
killall ssh
|
||||
# echo "\n⚽ copy settings"
|
||||
# php artisan nuh --d --f 67 --fun=2 --task=2
|
||||
|
||||
echo "\n⚽ grap avilable tournaments for given days"
|
||||
php artisan nuh --d --f 67 --run=5 --task=2
|
||||
# echo "\n⚽ close vpn"
|
||||
# killall ssh
|
||||
|
||||
echo "\n⚽ grapp data sofascore"
|
||||
php artisan nuh --d --f 67 --run=6 --task=2
|
||||
# echo "\n⚽ start task"
|
||||
# php artisan nuh --d --f 67 --fun=7 --task=2
|
||||
|
||||
echo "\n⚽ create zip archive"
|
||||
php artisan nuh --d --f 67 --run=3 --task=2
|
||||
# echo "\n⚽ tournaments for day"
|
||||
# php artisan nuh --d --f 67 --fun=5 --task=2
|
||||
|
||||
echo "\n⚽ mail archive"
|
||||
php artisan nuh --d --f 67 --run=4 --task=2
|
||||
echo "\n⚽ grapper events"
|
||||
php artisan nuh --d --f 67 --fun=6 --task=2
|
||||
|
||||
# echo "\n⚽ create zip archive"
|
||||
# php artisan nuh --d --f 67 --fun=3 --task=2
|
||||
|
||||
# echo "\n⚽ mail archive"
|
||||
# php artisan nuh --d --f 67 --fun=4 --task=2
|
||||
|
||||
# echo "\n⚽ end task"
|
||||
# php artisan nuh --d --f 67 --fun=8 --task=2
|
||||
|
||||
echo "\n😎 done :)"
|
||||
;;
|
||||
|
||||
@@ -15,7 +15,7 @@ return new class extends Migration
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('mode');
|
||||
$table->integer('sport_id')->index()->references('id')->on('sports');
|
||||
$table->integer('sport_id');
|
||||
$table->date('day_from')->nullable();
|
||||
$table->date('day_to')->nullable();
|
||||
$table->boolean('is_active')->default(0);
|
||||
|
||||
@@ -13,8 +13,8 @@ return new class extends Migration
|
||||
{
|
||||
Schema::create('sofa_score_task_tournaments', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->integer('sofa_score_task_id')->index()->references('id')->on('sofa_score_tasks');
|
||||
$table->integer('sofa_score_tournament_id')->index()->references('id')->on('sofa_score_tournaments');
|
||||
$table->integer('sofa_score_task_id');
|
||||
$table->integer('sofa_score_tournament_id');
|
||||
$table->boolean('disabled')->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
@@ -148,34 +148,6 @@ case "$1" in
|
||||
php artisan queue:restart
|
||||
php artisan optimize
|
||||
;;
|
||||
|
||||
"13")
|
||||
## AUTO GRAPPER SOFASCORE
|
||||
# -i ~/.ssh/id_rsa
|
||||
# echo "\n⚽ close all open vpn"
|
||||
# killall ssh
|
||||
|
||||
# echo "\n⚽ open vpn tunnel to prod"
|
||||
# ssh -f -N -L 13306:127.0.0.1:3306 -p 58371 root@162.55.242.190
|
||||
|
||||
# echo "\n⚽ copy active tournaments"
|
||||
# php artisan nuh --d --f 73 --prc=2
|
||||
|
||||
# echo "\n⚽ close tunnel"
|
||||
# killall ssh
|
||||
|
||||
# echo "\n⚽ grapp data sofascore"
|
||||
# php artisan nuh --d --f --y 72
|
||||
|
||||
# echo "\n⚽ create zip archive"
|
||||
# php artisan nuh --d --f --y 73 --prc=3
|
||||
|
||||
echo "\n⚽ mail archive"
|
||||
php artisan nuh --d --f --y 73 --prc=4
|
||||
|
||||
echo "\n😎 done :)"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo ""
|
||||
echo "--------------------------"
|
||||
@@ -193,7 +165,6 @@ case "$1" in
|
||||
echo "10 => a load today soccer, WITH proxy"
|
||||
echo "11 => a load all sport no date limit, NO proxy"
|
||||
echo "12 => clear queue and restart"
|
||||
echo "13 => a) open vpn tunnel\n b) copy tournaments to local\n e) close vpn tunnel\n d) grap sofascore\n e) create zip archive\n f) mail zip archive"
|
||||
echo "--------------------------"
|
||||
echo ""
|
||||
;;
|
||||
|
||||
Reference in new issue
Block a user