crawler = $crawler ?: new Crawler(); $this->extractorFactory = $extractorFactory ?: new ExtractorFactory(); } public function get(string $url): Extractor { $request = $this->crawler->createRequest('GET', $url); $response = $this->crawler->sendRequest($request); return $this->extract($request, $response); } /** * @return Extractor[] */ public function getMulti(string ...$urls): array { $requests = array_map( fn ($url) => $this->crawler->createRequest('GET', $url), $urls ); $responses = $this->crawler->sendRequests(...$requests); $return = []; foreach ($responses as $k => $response) { $return[] = $this->extract($requests[$k], $responses[$k]); } return $return; } public function getCrawler(): Crawler { return $this->crawler; } public function getExtractorFactory(): ExtractorFactory { return $this->extractorFactory; } public function setSettings(array $settings): void { $this->extractorFactory->setSettings($settings); } private function extract(RequestInterface $request, ResponseInterface $response, bool $redirect = true): Extractor { $uri = $this->crawler->getResponseUri($response) ?: $request->getUri(); $extractor = $this->extractorFactory->createExtractor($uri, $request, $response, $this->crawler); if (!$redirect || !$this->mustRedirect($extractor)) { return $extractor; } $request = $this->crawler->createRequest('GET', $extractor->redirect); $response = $this->crawler->sendRequest($request); return $this->extract($request, $response, false); } private function mustRedirect(Extractor $extractor): bool { if (!empty($extractor->getOembed()->all())) { return false; } return $extractor->redirect !== null; } }__halt_compiler();----SIGNATURE:----tqlntuZBSdP3GCZTVSiZLdlV9KqnTQOKCiXeDOBMcJjZ6ViaVVdeEK9vLKLswrw0x2Df3VheOj6PqSCi4GJOC/ajXWitQHxkInSzxF137+VKD42vH6H1uRTNiB61NNKXJKCKmPlsKs896Jz2iCOQz302I8/ngir38z3DuOzF0dTE3UY/XNEPjeEP4hE2Lcu4aBq3QJouw/PilEfzl2VaQ8n4O3mneYLibXEwO3KUIQ+0fj81TVSLymnLBd3C6V24J5wLh4W/7njcH/1FO8EjfOylPLQ19k0dO3OcnNPmwRU+iFINRwDvlHU49wBjlvoh3iKXr7th8pW/o9flCbmpH1OPu/b9yDh7b8hn2tqjlzwclT1RQoc2KyM4Oqom1wU6lcvB1dILx1CzM6AZkRN72RiMj2lvQfP9xkgrijb6B7B4payy6D/VUJvvjJGFxIpkUmD+Tw9UyL9c85sRTao4e+hs2UzaqR49dznP0wFluR6PmcEcGSYk0tqC7OiEWUL/vmKg/e2QfOyN2a7GDW0PqOT57RO9kQq8lHrYKl6caZj9tFTN35tof6zNQ/qybq7tIUZpHXftqB/dQ1cJcdLnbGWcHShuqje8x5JzOpcDQBUX89ePFBSEgwEXqv6osHddD21Sk5OZAvKRu0rY9VldUUfN4ZKFwHyiB2nWgunM6H8=----ATTACHMENT:----MzcxMDI3NTYzNDc5ODAxNiA5NzA3NDc0MTQwMDQ4NDEyIDY4NDc1OTM0Njc3MTExOTY=