wip
This commit is contained in:
1 parent
28ed78c864
commit
59f2eeec11
8 files changed
+342
-132
No files matched your search
@@ -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;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Whitespace-only changes.
Reference in new issue
Block a user