This commit is contained in:
salam committed 2026-08-21 12:11:29 +02:00
1 parent 28ed78c864
commit 59f2eeec11
8 files changed
+342 -132

No files matched your search

+29 -17
View File
@@ -4,6 +4,7 @@ namespace App\Console\Commands;
use App\Actions\PlayerPerSeason;
use App\Console\Commands\Grapper\Sofascore\Grapper;
use App\Console\Commands\Grapper\Sofascore\GrapperTest;
use App\Console\Commands\Grapper\Sofascore\Helper\SetStorage;
use App\Console\Commands\Grapper\Sofascore\MakeExcel;
use App\Console\Commands\Grapper\Sofascore\Rose;
@@ -16,14 +17,18 @@ use Illuminate\Console\Command;
class Grap extends Command
{
public static $options = [];
public static string $storage;
public static string $zipfile;
public static string $folder;
public static string $excel;
public static string $useragent = '4';
protected $signature = 'grp {id=0} {day=0} {--folder=} {--d} {--r} {--f}';
protected $signature = 'grp {id=0} {day=0} {--folder=} {--d} {--r} {--f} {--R} {--S}';
public function handle()
{
@@ -33,25 +38,28 @@ class Grap extends Command
self::$options['base_url'] = 'https://www.sofascore.com/';
if (! self::$options['id']) {
$txt = 'PARAMETERS' . PHP_EOL;
$txt .= '--d debug' . PHP_EOL;
$txt .= '--r restart range' . PHP_EOL;
$txt .= '--f force' . PHP_EOL;
$txt .= '--folder' . PHP_EOL;
$txt .= '-----------------------------------------------------------' . PHP_EOL;
$txt .= 'FUNCTION' . PHP_EOL;
$txt .= ' 1 grapper DAILY & subDays ( default 3)' . PHP_EOL;
$txt .= ' 2 grapper DATE' . PHP_EOL;
$txt .= ' 3 grapper RANGE' . PHP_EOL;
$txt .= ' 4 grapper ROSE' . PHP_EOL;
$txt .= ' 5 import to excel from folder' . PHP_EOL;
$txt .= ' 6 playeer/season' . PHP_EOL;
$txt .= ' 7 settings to local' . PHP_EOL;
$txt .= ' 11 move SQL' . PHP_EOL;
$txt = 'PARAMETERS'.PHP_EOL;
$txt .= '--d debug'.PHP_EOL;
$txt .= '--r restart range'.PHP_EOL;
$txt .= '--f force'.PHP_EOL;
$txt .= '--R read file'.PHP_EOL;
$txt .= '--S save to file'.PHP_EOL;
$txt .= '--folder'.PHP_EOL;
$txt .= '-----------------------------------------------------------'.PHP_EOL;
$txt .= 'FUNCTION'.PHP_EOL;
$txt .= ' 1 grapper DAILY & subDays ( default 3)'.PHP_EOL;
$txt .= ' 2 grapper DATE'.PHP_EOL;
$txt .= ' 3 grapper RANGE'.PHP_EOL;
$txt .= ' 4 grapper ROSE'.PHP_EOL;
$txt .= ' 5 import to excel from folder'.PHP_EOL;
$txt .= ' 6 playeer/season'.PHP_EOL;
$txt .= ' 7 settings to local'.PHP_EOL;
$txt .= ' 11 move SQL'.PHP_EOL;
$txt .= ' 12 testing url for grapping'.PHP_EOL;
Notice::note($txt, 'b', 1);
}
Notice::note('Task Id ' . self::$options['id'], 'gb');
Notice::note('Task Id '.self::$options['id'], 'gb');
switch (self::$options['id']) {
@@ -111,6 +119,10 @@ class Grap extends Command
SqlMover::run();
break;
case '12':
GrapperTest::load();
break;
default:
Notice::note('function not implemented yet', 'br', 1);
}
@@ -0,0 +1,66 @@
<?php
namespace App\Console\Commands\Grapper\Sofascore;
use App\Console\Commands\Grap;
use App\Console\Commands\Grapper\Sofascore\Helper\CurlLivescore;
use App\Utilities\Notice;
use DOMDocument;
use DOMXPath;
class GrapperTest
{
public static $testfiles = '/Testfiles/';
public static function load()
{
$read = Grap::$options['R'] ?? 0;
$save = Grap::$options['S'] ?? 0;
$testfile = 'livescore.txt';
$path = __DIR__.self::$testfiles.$testfile;
Notice::note('Grapper testing '.$testfile, 'b');
$url = 'https://www.livescore.in/horse-racing/canada/woodbine-2020/';
if ($read) {
Notice::note('data read localy', 'p');
$data = file_get_contents($path);
} else {
$data = CurlLivescore::load($url);
}
if ($save) {
file_put_contents($path, $data);
Notice::note('file saved localy', 'g');
}
$dom = new DOMDocument;
// Prevent warnings caused by HTML5 tags that native DOMDocument doesn't fully understand
libxml_use_internal_errors(true);
// Use mb_convert_encoding to ensure DOMDocument treats the input as UTF-8
$dom->loadHTML(mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8'));
libxml_clear_errors();
// 3. Use XPath to query specific HTML elements
$xpath = new DOMXPath($dom);
// Example: Target match rows or team names (Update classes based on actual DOM structure)
// Modern livescore sites often use classes like '.event__match' or '.event__participant'
$teams = $xpath->query("//div[contains(@class, 'event__participant')]");
foreach ($teams as $team) {
echo trim($team->nodeValue).PHP_EOL;
}
Notice::note($data, 'p', 1);
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Console\Commands\Grapper\Sofascore\Helper;
use App\Console\Commands\Grap;
use App\Utilities\Notice;
// use ForceUTF8\Encoding;
class CurlLivescore
{
public static function load(string $url)
{
$debug = Grap::$options['d'] ?? 0;
if ($debug) {
Notice::note($url, 'b');
}
$useragents = [];
$useragents[1] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2.1 Safari/605.1.15';
$useragents[2] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3.1 Safari/605.1.15';
$useragents[3] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36';
$useragents[4] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.1 Safari/605.1.15';
$useragents[5] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0';
$useragents[6] = 'Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36';
$headers = [
'GET /horse-racing/canada/woodbine-2020/ HTTP/1.1',
'Host: www.livescore.in',
'User-Agent: '.$useragents[Grap::$useragent],
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: de,en-US;q=0.9,en;q=0.8',
'Accept-Encoding: gzip, deflate, br, zstd',
'Referer: https://www.livescore.in/horse-racing/canada/woodbine/archive/',
'Upgrade-Insecure-Requests: 1',
'Sec-Fetch-Dest: document',
'Sec-Fetch-Mode: navigate',
'Sec-Fetch-Site: same-origin',
'Sec-Fetch-User: ?1',
'Connection: keep-alive',
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_ENCODING, '');
$data = curl_exec($ch);
// $data = Encoding::toUTF8($data);
// $data = gzdecode($data);
// $data = json_decode($data, true);
return $data;
}
}
Whitespace-only changes.