This commit is contained in:
salam committed 2026-07-18 16:46:33 +02:00
1 parent 11189ec3d6
commit 2be791d63b
14 files changed
+344 -195

No files matched your search

+24 -4
View File
@@ -2,15 +2,17 @@
namespace App\Console\Commands\Grapper;
use App\Console\Commands\Grapper\Sofascore\CreateZip;
use App\Console\Commands\Grapper\Sofascore\DaysTournament;
use App\Console\Commands\Grapper\Sofascore\Grapper;
use App\Console\Commands\Grapper\Sofascore\Helper\Strings;
use App\Console\Commands\Grapper\Sofascore\Helper\TaskConfig;
use App\Console\Commands\Grapper\Sofascore\PlayerPerSeason;
use App\Console\Commands\Grapper\Sofascore\SendMail;
use App\Console\Commands\Grapper\Sofascore\SettingsToLocal;
use App\Console\Commands\Nuh;
use App\Models\SofaScoreTask;
use App\Utilities\Notice;
use App\Utilities\ZipFolder;
ini_set('magic_quotes_runtime', false);
@@ -22,31 +24,40 @@ class Sofascore
{
$function = Nuh::$options['fun'];
self::$storage = storage_path('sofascore_data');
switch ($function) {
case 1:
PlayerPerSeason::run();
break;
case 2:
SettingsToLocal::run();
break;
case 3:
TaskConfig::start();
break;
case 4:
DaysTournament::run();
break;
case 5:
self::setStorage();
Grapper::load();
break;
case 6:
TaskConfig::end();
break;
case 7:
CreateZip::run();
self::setStorage();
ZipFolder::create(self::$storage);
break;
case 8:
self::setStorage();
SendMail::run();
break;
@@ -54,4 +65,13 @@ class Sofascore
Notice::note('id not valid', 'br', 1);
}
}
public static function setStorage()
{
$task = Nuh::$options['task'];
self::$storage = storage_path('sofascore_data') . '/' . Strings::clean(SofaScoreTask::where('id', $task)->value('name'));
dd(self::$storage);
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Console\Commands\Grapper\Sofascore;
use App\Console\Commands\Grapper\Sofascore;
use App\Console\Commands\Nuh;
use App\Utilities\Notice;
use App\Utilities\ZipFolder;
class CreateZip
{
public static function run()
{
$debug = Nuh::$options['d'] ?? 0;
ZipFolder::create(Sofascore::$storage);
if ($debug) {
Notice::note('zips created', 'bb');
}
}
}
@@ -15,6 +15,15 @@ use Illuminate\Support\Facades\Log;
class DaysTournament
{
/**
* a nuh --d --f 67 --fun=4 --task=1
*
* Ita Serie-A-Saison 23-08-2025 - 24-05-2026
* Ger Bundesliga 22-08-2025 – 16-05-2026
* Eng Premier league 15-08-2025 - 24-05-2026
* Spa La Liga 15-08-2025 - 24-05-2026
* Fra Liggue 15-08-2025 - 17-05-2026
*/
public static function run()
{
$debug = Nuh::$options['d'] ?? 0;
@@ -29,7 +38,7 @@ class DaysTournament
$day = $d['day'];
$slug = $d['slug'];
$has = SofaScoreDayTournament::where('day', $day)->first();
$has = SofaScoreDayTournament::where('day', $day)->where('sport_id', $sport_id)->first();
if ($has) {
if ($debug) {
@@ -154,6 +163,7 @@ class DaysTournament
*/
SofaScoreDayTournament::updateOrCreate([
'tournament_id' => (int) $tournament['id'],
'sport_id' => (int) $sport_id,
'day' => $day,
]);
}
@@ -35,9 +35,6 @@ class Grapper
$active_tournaments = SofaScoreTaskTournament::with('tournament')->where('sofa_score_task_id', $task_id)->where('disabled', false)->get();
// dd($active_tournaments->toArray());
/**
* empty grapping folder
* empty mailing text
@@ -83,10 +80,13 @@ class Grapper
foreach ($data['events'] as $event) {
$now = Carbon::now()->subHours(4);
$now = Carbon::now()->subHours(3);
$carbon_day = new Carbon($day);
$starttime = Carbon::createFromTimestamp($event['startTimestamp']);
if ($now->greaterThan($starttime)) {
if ($now->greaterThan($starttime) && $starttime->isSameDay($carbon_day)) {
Sleeper::rand(1);
@@ -0,0 +1,15 @@
<?php
namespace App\Console\Commands\Grapper\Sofascore\Helper;
class Strings
{
public static function clean(string $string)
{
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
}
}
@@ -29,7 +29,7 @@ class SofaScoreTaskForm
->allowHtml()
->required()
->options([
'auto_updater' => '<span class="text-green-600">Grap last 3 days</span>',
'auto_updater' => '<span class="text-green-600">Yesterday</span>',
'date' => '<span class="text-blue-600">Grap a date</span>',
'range' => '<span class="text-amber-600">Grap a date range</span>',
]),
@@ -2,11 +2,16 @@
namespace App\Filament\Clusters\StaticData\Resources\StatistikoDetails\Tables;
use App\Models\StatistikoDetail;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\Checkbox;
use Filament\Tables\Columns\Layout\Stack;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Enums\FiltersLayout;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class StatistikoDetailsTable
{
@@ -38,13 +43,39 @@ class StatistikoDetailsTable
// TextColumn::make('team_name')->prefix('Team Name: '),
]),
])
->emptyStateHeading('No double player in details')
->contentGrid([
'md' => 2,
'xl' => 4,
])
->filters([
Filter::make('player_filters')
->schema([
Checkbox::make('find_double'),
])->query(function (Builder $query, array $data): Builder {
return $query->when(
$data['find_double'],
function (Builder $query) {
$pDetails = StatistikoDetail::pluck('tm_player_id')->toArray();
$doublpDetails = array_diff_assoc(
$pDetails,
array_unique($pDetails)
);
$query->whereIn('tm_player_id', $doublpDetails)->orderBy('tm_player_id');
}
);
})->indicateUsing(function (array $data): ?string {
if (! $data['find_double']) {
return null;
}
return 'Find Double';
}),
], layout: FiltersLayout::AboveContent)
->deferFilters(false)
->recordActions([
EditAction::make()->hiddenLabel(),
DeleteAction::make()->hiddenLabel(),
EditAction::make()->iconButton(),
DeleteAction::make()->iconButton(),
]);
}
}
@@ -49,6 +49,8 @@ class StatistikoPlayersTable
}
$arr[$match_id][] = $player_id;
}
return $query->where('match_id', 0);
}
);
})->indicateUsing(function (array $data): ?string {
@@ -59,6 +61,7 @@ class StatistikoPlayersTable
}),
], layout: FiltersLayout::AboveContent)
->emptyStateHeading('No player double in an event')
->deferFilters(false)
->recordActions([
EditAction::make()->iconButton(),
@@ -131,6 +131,9 @@ class ImportPlayer
// ss_playerrating_value,
// tm_player_id
// 'sport_id' => (int) $row[0],
// 'match_id' => (int) $row[1],
// 'ss_player_id' => (int) $row[2],
// 'activeteam_id' => $row[2],
// 'playersubstitute_id' => $row[3],
// 'goals' => $row[4],
+1
View File
@@ -9,6 +9,7 @@ class SofaScoreDayTournament extends Model
protected $fillable = [
'id',
'tournament_id',
'sport_id',
'day',
];
+1 -4
View File
@@ -12,11 +12,8 @@ class ZipFolder
public static function create(string $path)
{
// $zipFilePath = Sofascore::$storage . '/' . $day . '.zip';
// $path = Sofascore::$storage . '/' . $day;
$zipFilePath = $path . '/archive.zip';
$zip = new ZipArchive();
if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
@@ -14,6 +14,7 @@ return new class extends Migration
Schema::create('sofa_score_day_tournaments', function (Blueprint $table) {
$table->id();
$table->integer('tournament_id')->index();
$table->integer('sport_id')->index();
$table->date('day')->index();
$table->boolean('grapped')->index()->default(0);
$table->timestamps();
+239 -149
View File
@@ -1,149 +1,239 @@
XHRGET
https://www.sofascore.com/api/v1/sport/football/scheduled-tournaments/2026-07-09/page/1
[HTTP/2 200 128ms]
scheduled (100)[ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, … ]
0 { tournament: {…}, timezoneEventCount: {…} }
tournament { name: "FIFA World Cup, Knockout", slug: "world-cup-knockout-stage", priority: 805, … }
name "FIFA World Cup, Knockout"
slug "world-cup-knockout-stage"
category { name: "World", slug: "world", priority: 20, … }
name "World"
slug "world"
sport { name: "Football", slug: "football", id: 1 }
name "Football"
slug "football"
id 1
priority 20
id 1468
flag "international"
fieldTranslations { nameTranslation: {…}, shortNameTranslation: {} }
nameTranslation { ar: "العالم", bn: "বিশ্ব", hi: "विश्व", … }
shortNameTranslation {}
uniqueTournament { name: "FIFA World Cup", slug: "world-championship", userCount: 1986199, … }
priority 805
id 3948
fieldTranslations { nameTranslation: {…}, shortNameTranslation: {} }
timezoneEventCount { 0: 1, 3600: 1, 7200: 1, … }
0 1
3600 1
7200 1
10800 1
12600 1
-43200 1
-39600 1
-36000 1
-34200 1
-32400 1
-28800 1
-25200 1
-21600 1
-18000 1
-16200 1
-14400 1
-12600 1
-10800 1
-9000 1
-7200 1
-3600 1
1 { tournament: {…}, timezoneEventCount: {…} }
2 { tournament: {…}, timezoneEventCount: {…} }
3 { tournament: {…}, timezoneEventCount: {…} }
4 { tournament: {…}, timezoneEventCount: {…} }
5 { tournament: {…}, timezoneEventCount: {…} }
6 { tournament: {…}, timezoneEventCount: {…} }
7 { tournament: {…}, timezoneEventCount: {…} }
8 { tournament: {…}, timezoneEventCount: {…} }
9 { tournament: {…}, timezoneEventCount: {…} }
10 { tournament: {…}, timezoneEventCount: {…} }
11 { tournament: {…}, timezoneEventCount: {…} }
12 { tournament: {…}, timezoneEventCount: {…} }
13 { tournament: {…}, timezoneEventCount: {…} }
14 { tournament: {…}, timezoneEventCount: {…} }
15 { tournament: {…}, timezoneEventCount: {…} }
16 { tournament: {…}, timezoneEventCount: {…} }
17 { tournament: {…}, timezoneEventCount: {…} }
18 { tournament: {…}, timezoneEventCount: {…} }
19 { tournament: {…}, timezoneEventCount: {…} }
20 { tournament: {…}, timezoneEventCount: {…} }
21 { tournament: {…}, timezoneEventCount: {…} }
22 { tournament: {…}, timezoneEventCount: {…} }
23 { tournament: {…}, timezoneEventCount: [] }
24 { tournament: {…}, timezoneEventCount: {…} }
25 { tournament: {…}, timezoneEventCount: {…} }
26 { tournament: {…}, timezoneEventCount: {…} }
27 { tournament: {…}, timezoneEventCount: {…} }
28 { tournament: {…}, timezoneEventCount: {…} }
29 { tournament: {…}, timezoneEventCount: {…} }
30 { tournament: {…}, timezoneEventCount: {…} }
31 { tournament: {…}, timezoneEventCount: {…} }
32 { tournament: {…}, timezoneEventCount: {…} }
33 { tournament: {…}, timezoneEventCount: {…} }
34 { tournament: {…}, timezoneEventCount: {…} }
35 { tournament: {…}, timezoneEventCount: {…} }
36 { tournament: {…}, timezoneEventCount: {…} }
37 { tournament: {…}, timezoneEventCount: {…} }
38 { tournament: {…}, timezoneEventCount: {…} }
39 { tournament: {…}, timezoneEventCount: {…} }
40 { tournament: {…}, timezoneEventCount: {…} }
41 { tournament: {…}, timezoneEventCount: {…} }
42 { tournament: {…}, timezoneEventCount: {…} }
43 { tournament: {…}, timezoneEventCount: {…} }
44 { tournament: {…}, timezoneEventCount: {…} }
45 { tournament: {…}, timezoneEventCount: {…} }
46 { tournament: {…}, timezoneEventCount: {…} }
47 { tournament: {…}, timezoneEventCount: {…} }
48 { tournament: {…}, timezoneEventCount: {…} }
49 { tournament: {…}, timezoneEventCount: {…} }
50 { tournament: {…}, timezoneEventCount: {…} }
51 { tournament: {…}, timezoneEventCount: {…} }
52 { tournament: {…}, timezoneEventCount: {…} }
53 { tournament: {…}, timezoneEventCount: [] }
54 { tournament: {…}, timezoneEventCount: {…} }
55 { tournament: {…}, timezoneEventCount: [] }
56 { tournament: {…}, timezoneEventCount: {…} }
57 { tournament: {…}, timezoneEventCount: {…} }
58 { tournament: {…}, timezoneEventCount: {…} }
59 { tournament: {…}, timezoneEventCount: {…} }
60 { tournament: {…}, timezoneEventCount: {…} }
61 { tournament: {…}, timezoneEventCount: {…} }
62 { tournament: {…}, timezoneEventCount: {…} }
63 { tournament: {…}, timezoneEventCount: {…} }
64 { tournament: {…}, timezoneEventCount: {…} }
65 { tournament: {…}, timezoneEventCount: {…} }
66 { tournament: {…}, timezoneEventCount: {…} }
67 { tournament: {…}, timezoneEventCount: {…} }
68 { tournament: {…}, timezoneEventCount: {…} }
69 { tournament: {…}, timezoneEventCount: {…} }
70 { tournament: {…}, timezoneEventCount: {…} }
71 { tournament: {…}, timezoneEventCount: {…} }
72 { tournament: {…}, timezoneEventCount: {…} }
73 { tournament: {…}, timezoneEventCount: {…} }
74 { tournament: {…}, timezoneEventCount: {…} }
75 { tournament: {…}, timezoneEventCount: {…} }
76 { tournament: {…}, timezoneEventCount: {…} }
77 { tournament: {…}, timezoneEventCount: {…} }
78 { tournament: {…}, timezoneEventCount: {…} }
79 { tournament: {…}, timezoneEventCount: {…} }
80 { tournament: {…}, timezoneEventCount: {…} }
81 { tournament: {…}, timezoneEventCount: {…} }
82 { tournament: {…}, timezoneEventCount: [] }
83 { tournament: {…}, timezoneEventCount: {…} }
84 { tournament: {…}, timezoneEventCount: {…} }
85 { tournament: {…}, timezoneEventCount: {…} }
86 { tournament: {…}, timezoneEventCount: {…} }
87 { tournament: {…}, timezoneEventCount: {…} }
88 { tournament: {…}, timezoneEventCount: {…} }
89 { tournament: {…}, timezoneEventCount: {…} }
90 { tournament: {…}, timezoneEventCount: {…} }
91 { tournament: {…}, timezoneEventCount: {…} }
92 { tournament: {…}, timezoneEventCount: {…} }
93 { tournament: {…}, timezoneEventCount: {…} }
94 { tournament: {…}, timezoneEventCount: {…} }
95 { tournament: {…}, timezoneEventCount: {…} }
96 { tournament: {…}, timezoneEventCount: {…} }
97 { tournament: {…}, timezoneEventCount: {…} }
98 { tournament: {…}, timezoneEventCount: {…} }
99 { tournament: {…}, timezoneEventCount: {…} }
hasNextPage true
{
"eventState": [],
"tournament": {
"name": "Allsvenskan",
"slug": "allsvenskan",
"category": {
"name": "Sweden",
"slug": "sweden",
"sport": { "name": "Football", "slug": "football", "id": 1 },
"priority": 0,
"country": {
"alpha2": "SE",
"alpha3": "SWE",
"name": "Sweden",
"slug": "sweden"
},
"id": 9,
"flag": "sweden",
"alpha2": "SE",
"fieldTranslations": {
"nameTranslation": {
"ar": "\u0627\u0644\u0633\u0648\u064a\u062f",
"ru": "\u0428\u0432\u0435\u0446\u0438\u044f"
},
"shortNameTranslation": []
}
},
"uniqueTournament": {
"name": "Allsvenskan",
"slug": "allsvenskan",
"primaryColorHex": "#d38509",
"secondaryColorHex": "#212759",
"category": {
"name": "Sweden",
"slug": "sweden",
"sport": { "name": "Football", "slug": "football", "id": 1 },
"priority": 0,
"country": {
"alpha2": "SE",
"alpha3": "SWE",
"name": "Sweden",
"slug": "sweden"
},
"id": 9,
"flag": "sweden",
"alpha2": "SE",
"fieldTranslations": {
"nameTranslation": {
"ar": "\u0627\u0644\u0633\u0648\u064a\u062f",
"ru": "\u0428\u0432\u0435\u0446\u0438\u044f"
},
"shortNameTranslation": []
}
},
"userCount": 29399,
"hasPerformanceGraphFeature": true,
"country": [],
"id": 40,
"hasEventPlayerStatistics": true,
"displayInverseHomeAwayTeams": false,
"fieldTranslations": {
"nameTranslation": {
"ar": "\u0627\u0644\u062f\u0648\u0631\u064a \u0627\u0644\u0633\u0648\u064a\u062f\u064a \u0627\u0644\u0645\u0645\u062a\u0627\u0632",
"bn": "\u0985\u09b2\u09b8\u09ad\u09c7\u09a8\u09b8\u09cd\u0995\u09be\u09a8",
"hi": "\u0911\u0932\u0938\u094d\u0935\u0947\u0928\u094d\u0938\u094d\u0915\u0928",
"ru": "\u0410\u043b\u043b\u0441\u0432\u0435\u043d\u0441\u043a\u0430\u043d"
},
"shortNameTranslation": []
}
},
"priority": 192,
"isGroup": false,
"isLive": false,
"id": 24,
"fieldTranslations": {
"nameTranslation": {
"ar": "\u0627\u0644\u062f\u0648\u0631\u064a \u0627\u0644\u0633\u0648\u064a\u062f\u064a \u0627\u0644\u0645\u0645\u062a\u0627\u0632",
"bn": "\u0985\u09b2\u09b8\u09ad\u09c7\u09a8\u09b8\u09cd\u0995\u09be\u09a8",
"hi": "\u0911\u0932\u0938\u094d\u0935\u0947\u0928\u094d\u0938\u094d\u0915\u0928",
"ru": "\u0410\u043b\u043b\u0441\u0432\u0435\u043d\u0441\u043a\u0430\u043d"
},
"shortNameTranslation": []
}
},
"season": {
"name": "Allsvenskan 2026",
"year": "2026",
"editor": false,
"id": 87925
},
"roundInfo": { "round": 12 },
"customId": "jKsrK",
"status": { "code": 100, "description": "Ended", "type": "finished" },
"winnerCode": 1,
"venue": {
"city": {
"name": "Stockholm",
"country": {
"alpha2": "SE",
"alpha3": "SWE",
"name": "Sweden",
"slug": "sweden"
},
"id": 19506
},
"venueCoordinates": { "latitude": 59.291033, "longitude": 18.084543 },
"hidden": true,
"slug": "tele2-arena",
"name": "3Arena",
"capacity": 32000,
"country": {
"alpha2": "SE",
"alpha3": "SWE",
"name": "Sweden",
"slug": "sweden"
},
"id": 12373,
"fieldTranslations": {
"nameTranslation": {
"ar": "\u0645\u0644\u0639\u0628 \u062a\u064a\u0644\u064a 2",
"hi": "\u091f\u0947\u0932\u09402 \u090f\u0930\u093f\u0928\u093e",
"bn": "\u099f\u09bf\u0987\u098f\u09b2\u09872 \u098f\u09b0\u09bf\u09a8\u09be",
"ru": "\u0410\u0440\u0435\u043d\u0430 3"
},
"shortNameTranslation": []
},
"stadium": { "name": "3Arena", "capacity": 32000 }
},
"homeTeam": {
"name": "Djurg\u00e5rdens IF",
"slug": "djurgardens-if",
"shortName": "Djurg\u00e5rden",
"gender": "M",
"sport": { "name": "Football", "slug": "football", "id": 1 },
"userCount": 42579,
"nameCode": "DIF",
"disabled": false,
"national": false,
"type": 0,
"country": {
"alpha2": "SE",
"alpha3": "SWE",
"name": "Sweden",
"slug": "sweden"
},
"id": 1759,
"subTeams": [],
"teamColors": {
"primary": "#33ccff",
"secondary": "#000099",
"text": "#000099"
},
"fieldTranslations": {
"nameTranslation": {
"ar": "\u062f\u064a\u0648\u0631\u063a\u0627\u0631\u062f\u0646\u0633 \u0625\u0641",
"ru": "\u0424\u041a \u042e\u0440\u0433\u043e\u0440\u0434\u0435\u043d"
},
"shortNameTranslation": {
"ar": "\u062f\u064a\u0648\u0631\u063a\u0627\u0631\u062f\u0646",
"bn": "\u099c\u09c1\u09b0\u09cd\u0997\u09be\u09b0\u09cd\u09a1\u09c7\u09a8\u09b8",
"hi": "\u091c\u0941\u0930\u094d\u0917\u093e\u0930\u094d\u0921\u0947\u0928"
}
}
},
"awayTeam": {
"name": "Halmstads BK",
"slug": "halmstads-bk",
"shortName": "Halmstad",
"gender": "M",
"sport": { "name": "Football", "slug": "football", "id": 1 },
"userCount": 10732,
"nameCode": "HBK",
"disabled": false,
"national": false,
"type": 0,
"country": {
"alpha2": "SE",
"alpha3": "SWE",
"name": "Sweden",
"slug": "sweden"
},
"id": 1767,
"subTeams": [],
"teamColors": {
"primary": "#0066ff",
"secondary": "#0066ff",
"text": "#0066ff"
},
"fieldTranslations": {
"nameTranslation": {
"ar": "\u0647\u0627\u0644\u0645\u0633\u062a\u0627\u062f\u0632 \u0628\u064a \u0643\u064a\u0647",
"ru": "\u0424\u041a \u0425\u0430\u043b\u044c\u043c\u0441\u0442\u0430\u0434"
},
"shortNameTranslation": []
}
},
"homeScore": {
"current": 3,
"display": 3,
"period1": 2,
"period2": 1,
"normaltime": 3
},
"awayScore": {
"current": 0,
"display": 0,
"period1": 0,
"period2": 0,
"normaltime": 0
},
"time": {
"injuryTime1": 3,
"injuryTime2": 3,
"currentPeriodStartTimestamp": 1783965872,
"lastPeriodEndTimestamp": 1783964942
},
"changes": {
"changes": ["status.code", "status.description", "status.type"],
"changeTimestamp": 1783968772
},
"hasGlobalHighlights": true,
"hasEventPlayerStatistics": true,
"hasEventPlayerHeatMap": true,
"detailId": 1,
"crowdsourcingDataDisplayEnabled": false,
"correctAiInsight": true,
"correctHalftimeAiInsight": true,
"id": 15272449,
"slug": "halmstads-bk-djurgardens-if",
"startTimestamp": 1783962000,
"finalResultOnly": false,
"feedLocked": true,
"isEditor": false,
"eventFilters": {
"category": ["club"],
"level": ["top-competitions", "pro"],
"gender": ["M"]
}
}
+7 -7
View File
@@ -30,19 +30,19 @@ case "$1" in
# killall ssh
# echo "\n⚽ TaskConfig start"
# php artisan nuh --d --f 67 --fun=3 --task=$1
php artisan nuh --d --f 67 --fun=3 --task=$1
echo "\n⚽ Days Tournament"
php artisan nuh --d --f 67 --fun=4 --task=$1
# echo "\n⚽ Days Tournament"
# php artisan nuh --d --f 67 --fun=4 --task=$1
echo "\n⚽ Grapper"
php artisan nuh --d --f 67 --fun=5 --task=$1
# echo "\n⚽ Grapper"
# php artisan nuh --d --f 67 --fun=5 --task=$1
# echo "\n⚽ TaskConfig end"
# php artisan nuh --d --f 67 --fun=6 --task=$1
echo "\n⚽ CreateZip"
php artisan nuh --d --f 67 --fun=7 --task=$1
# echo "\n⚽ CreateZip"
# php artisan nuh --d --f 67 --fun=7 --task=$1
# echo "\n⚽ SendMail"
# php artisan nuh --d --f 67 --fun=8 --task=$1