This commit is contained in:
salam committed 2026-07-03 10:55:55 +02:00
1 parent 75d7914a59
commit dc76eb35ae
21 files changed
+177 -178

No files matched your search

+10 -21
View File
@@ -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();
+3 -3
View File
@@ -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'
@@ -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(),
]);
}
}
+8
View File
@@ -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);
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
View File
@@ -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();
});
-29
View File
@@ -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 ""
;;