setHostByMyWeb($host); $this->setPathByMyStorage(WRITEPATH . "uploads" . DIRECTORY_SEPARATOR . "Yamap"); } final public function getDebug(): bool { return $this->_debug; } final public function setDebug(bool $debug): void { $this->_debug = $debug; } public function getCrawler(string $url, string $tag): Crawler { $response = $this->getContentByMyWeb($url); if (!$response) { throw new \Exception("getCrawler 실패:{$url}"); } return $this->createByMyCrawler($response)->filter($tag); } public function getListURLs( Crawler $crawler, string $item_tag, string $item_subject_tag, string $item_nickname_tag, string $item_nickname_skip, array $urls = [] ): array { //div.bbs_item를 가진 객체를 찾아서 같은 형식의 객체(sibling)를 배열로 넘김 $crawler->filter($item_tag)->each( function (Crawler $node) use ( &$urls, $item_subject_tag, &$item_nickname_tag, &$item_nickname_skip ): void { //bbs_item에서 span.g_nickname 객체를 찾아서 작성자거 "관리자" 아닌지 확인 후 Return Bool $nickname = $node->filter($item_nickname_tag)->text(); log_message("debug", $item_nickname_tag . ":" . $nickname); if ($nickname != $item_nickname_skip) { $options = ["tag" => $item_subject_tag, "attr" => "href"]; $urls = $this->getTagDatasByMyCrawler($node, $options); } } ); return $urls; } public function download(Crawler $crawler, array $options): void { log_message("debug", "download:{$options["tag"]},{$options["attr"]}"); $urls = $this->getTagDatasByMyCrawler($crawler, $options); foreach ($urls as $url) { $this->downloadByMyWeb($url, $this->getPathByMyStorage(), $this->getDebug()); } } }