MyHomeCollection/app/Parser.php

52 lines
1.2 KiB
PHP
Raw Normal View History

2020-07-23 12:26:10 +02:00
<?php
namespace App;
2020-11-09 17:35:50 +01:00
use App\Exceptions\UnknownParser;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Config;
2020-07-23 12:26:10 +02:00
abstract class Parser
{
protected $client;
protected $url;
protected function __construct($url)
{
$this->url = $url;
$this->client = new Client([
2020-07-23 12:26:10 +02:00
'timeout' => 60,
'verify' => false,
'headers' => [
'user-agent' => 'Dalvik/2.1.0 (Linux; U; Android 6.0.1; D5803 Build/MOB30M.Z1)',
],
]);
}
/**
* @param string $url
*
* @return \App\Parser|null
*/
public static function factory(string $url): ?Parser
2020-07-23 12:26:10 +02:00
{
$parsers = Config::get('parser.parsers', []);
foreach ($parsers as $domain => $parser) {
if (false !== strpos($url, $domain)) {
return new $parser($url);
}
2020-07-23 12:26:10 +02:00
}
2020-11-09 17:35:50 +01:00
throw new UnknownParser(sprintf(
'Can\'t find an url in «%s» file with the following URL «%s». Please update the file accordingly.',
'parser.php',
$url
));
2020-07-23 12:26:10 +02:00
}
/**
* @return \App\ParsedHome
*/
abstract public function parse(): ParsedHome;
}