47 lines
1.5 KiB
PHP
47 lines
1.5 KiB
PHP
<?php
|
|
|
|
use Domain\Model\MemoryConfiguration;
|
|
use Illuminate\Support\Collection;
|
|
use Symfony\Component\DomCrawler\Crawler;
|
|
|
|
class MemoryQVLScraper
|
|
{
|
|
/**
|
|
* @param string $html
|
|
* @return Collection|MemoryConfiguration[]
|
|
*/
|
|
public function scrape(string $html): Collection
|
|
{
|
|
$configurations = [];
|
|
|
|
$crawler = new Crawler();
|
|
$crawler->addHtmlContent($html);
|
|
$crawler->filterXPath('//tr')->each(function (Crawler $tr) use (&$configurations) {
|
|
$tableData = $tr->filterXPath('//td');
|
|
if ($tableData->count() === 0) {
|
|
return;
|
|
}
|
|
$configurations[] = $this->fromTableData($tableData);
|
|
});
|
|
|
|
return collect($configurations);
|
|
}
|
|
|
|
private function fromTableData(Crawler $tableData): MemoryConfiguration
|
|
{
|
|
return new MemoryConfiguration(
|
|
type: $tableData->eq(0)->text('DDR4'),
|
|
vendor: $tableData->eq(1)->text(),
|
|
speed: (int)$tableData->eq(2)->text(0),
|
|
supportedSpeed: (int)$tableData->eq(3)->text(0),
|
|
moduleSizeHr: $tableData->eq(4)->text(),
|
|
module: $tableData->eq(5)->text(),
|
|
chip: $tableData->eq(6)->text(),
|
|
isDualSided: $tableData->eq(7)->text() === 'DS',
|
|
dimmSocketSupport: $tableData->eq(8)->text(),
|
|
overclockingSupport: strtolower($tableData->eq(9)->text('')),
|
|
note: $tableData->eq(10)->text()
|
|
);
|
|
}
|
|
}
|