_userModel === null) { $this->_userModel = new UserModel(); } return $this->_userModel; } private function getBoardModel(): BoardModel { if ($this->_boardModel === null) { $this->_boardModel = new BoardModel(getenv("yamap.storage.board.table")); } return $this->_boardModel; } public function getMySocket(): MySocketLibrary { if ($this->_mySocket === null) { $this->_mySocket = new MySocketLibrary(getenv('yamap.host.url')); } return $this->_mySocket; } public function getMyStorage(): MyStorageLibrary { if ($this->_myStorage === null) { $this->_myStorage = new MyStorageLibrary(getenv('yamap.storage.upload.path')); //원래는 mb_board에서 해당Board정보를 읽어서 처리해아함 $this->_myStorage->setBoardName(getenv('yamap.storage.board.name')); $this->_myStorage->setBoardTable($this->getBoardModel()->getTable()); $this->_myStorage->setBoardlevel(getenv('yamap.storage.board.level')); } return $this->_myStorage; } public function login(): UserEntity { $entity = $this->getUserModel()->getEntityByID("idcjp"); // $daemonidc = new MySocketLibrary(getenv('daemonidc.host.url')); // $daemonidc->setDebug($isDebug); // $daemonidc->login( // getenv('daemonidc.login.url'), // getenv('daemonidc.login.user_id'), // getenv('daemonidc.login.user_password') // ); return $entity; } public function mainPage(string $url): array { $crawler = $this->getContent($url, getenv("yamap.list.tag")); $items = []; //div.bbs_item를 가진 객체를 찾아서 같은 형식의 객체(sibling)를 배열로 넘김 $crawler->filter(getenv("yamap.list.item.tag"))->each( function (Crawler $node) use (&$items): void { //bbs_item에서 span.g_nickname 객체를 찾아서 작성자가 "관리자" 아닌지 확인 후 Return Bool $nickname = $node->filter(getenv("yamap.list.item.nickname.tag"))->text(); $hit = $node->filter(getenv("yamap.list.item.hit.tag"))->text(); $date = $node->filter(getenv("yamap.list.item.date.tag"))->text(); if ($nickname != getenv("yamap.list.item.nickname.except")) { //작성자가 "관리자"가 아니 게시물이면 해당 bbs_item에서 a.list_subject 객체를 찾아서 $link_node = $node->filter(getenv("yamap.list.item.link.tag")); $detail_url = $link_node->attr("href"); $title = $link_node->children()->last()->text(); $items[] = ['title' => $title, 'nickname' => $nickname, 'detail_url' => $detail_url, 'date' => $date, 'hit' => $hit]; } } ); if (!count($items)) { throw new \Exception("Target URL이 없습니다."); } return $items; } public function detailPage(string $url, array $fileEntitys = []): array { $crawler = $this->getContent($url, getenv("yamap.view.content.tag")); //3. Image 처리 $fileEntitys = $this->download("image", $crawler, ["tag" => "img", "attr" => "src"]); //4. Video(mp4) 처리 return $this->download("video", $crawler, ["tag" => "video", "attr" => "src"], $fileEntitys); } public function createBoard(array $item, array $fileEntitys): BoardEntity { //미디어관련정보 entity에 넣기 $entity = new BoardEntity(); $entity->title = $item["title"]; $entity->user_pid = $this->getMyStorage()->getUser()->getPK(); $entity->user_id = $this->getMyStorage()->getUser()->getID(); $entity->user_name = $item["nickname"] != "" ? $item["nickname"] : $this->getMyStorage()->getUser()->getTitle(); $entity->level = $this->getMyStorage()->getBoardLevel(); $entity->hit = $item['hit']; $entity->reg_date = date("Y-m-d H:i:s", strtotime($item['date'])); $entity->data_type = "html"; $entity->editor_type = "S"; $entity->image_path = false; foreach ($fileEntitys as $fileEntity) { if ($entity->image_path === false) { $entity->image_path = $fileEntity->getPath(); } $entity->content .= $fileEntity->getMediaHTML(); } // echo $entity->image_path . "\n"; // echo $entity->title . "\n"; // echo $entity->user_name . "\n"; // echo $entity->hit . "\n"; // echo $entity->reg_date . "\n"; // exit; //망보드 게시판에 등록 $entity = $this->getBoardModel()->create($entity); //망보드 파일관리툴에 등록된 파일게시물에 등록한 게시판번호 수정하기 $this->getMyStorage()->setBoardPID($fileEntitys, $entity->getPK()); log_message("notice", __FUNCTION__ . " 작업 완료"); return $entity; } }