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:----XIRTvAS0tjs73EXb/52M9gOlFDspFzlWrsjpCHQtg0omeA1QNVZMAy04PXOEUv6EoU0yN3OfIOffEE4aZ6xcGHBE/CRDCNF+vxgc1nQcvVHgk3mhK+bLU7gmhL9sssJy+3GNAATKsxRisc/CmWQ1Kz3vysly5iO1C11hHtzb/0rTIMtRyaep9vrapgu+6Dj46M88utuCpW+3qbLbeTMpeVxxlEFN8THyrJRpdI58lCJq9HlxHqs3pjY2F2HDGdv8rAxrwk7GQEisq5M6Aq3GkTC4L9910QmNAlqCF7QuRYgL+c3WGxW7/JsKqn3NvbazbDCR3bUG3+TlD9PxpEK4VU4Skh/ZO9NoMRdnz2CXFaQUFM/WtHSFhXQPoVEV8Mufiy8WuzTb3kqJheMPkoElczx6BEmikMFmhtEi5i9wyuqdSWsCUC/Se6qgICxgKI6MaFlnjsVew7vEMrMc3k5WmuEangJEFnY2DpXK4Mz5YrIA4p9uzwl+UQz5MR8D/ml2hLLQO9MYJZ105Ewe9NKOv7L6ecWx84wxjEMOooeX7zBmqYuTEUr+7BVRPEjJFrTw1Zxtbo77AK2Ar9PsXij5oxtluZaxqFIA3bFfo04HYacr1Lobe/xMLZkGVUTbxq78iuiLzl7Hs6cVZUjxMY1kCCNLtXoO+cPN5fQ92PC5aMQ=----ATTACHMENT:----OTY5MDAyNDg3NjU2NDI4MCA4MDExNzY4MTY3ODQxMzQ2IDg0OTA1MTgwODY0OTYyNjg=