diff --git a/app/Libraries/MyCrawler/MyCrawler.php b/app/Libraries/MyCrawler/MyCrawler.php
index 51088d2..c20cbd2 100644
--- a/app/Libraries/MyCrawler/MyCrawler.php
+++ b/app/Libraries/MyCrawler/MyCrawler.php
@@ -15,7 +15,7 @@ abstract class MyCrawler extends CommonLibrary
parent::__construct();
$this->_mySocket = $mySocket;
}
- abstract protected function getMyStorage();
+ abstract protected function createMyStorage();
abstract protected function detail_page(int $cnt, array $listInfo): void;
final protected function getMySocket()
{
@@ -61,7 +61,7 @@ abstract class MyCrawler extends CommonLibrary
log_message("debug", "\n-----------detailPage Tag: {$tag}---------------\n{$selector->html()}\n---------------------------\n");
$urls = $this->getMediaUrlsByMediaType("image", $selector, ["tag" => "img", "attr" => "src"]);
$urls = $this->getMediaUrlsByMediaType("video", $selector, ["tag" => "video", "attr" => "src"], $urls);
- log_message("debug", "\n-------------------------\n" . var_export($urls, true) . "\n-----------------------\n");
+ // log_message("debug", "\n-------------------------\n" . var_export($urls, true) . "\n-----------------------\n");
log_message("notice", "-----------" . __FUNCTION__ . " 작업완료--------");
return array($listInfo, $urls);
}
@@ -70,11 +70,12 @@ abstract class MyCrawler extends CommonLibrary
private function media_save(int $file_sequence, string $media_type, string $file_name, string $content): mixed
{
log_message("debug", __FUNCTION__ . " 원본파일 {$file_name} 작업 시작");
- $this->getMyStorage()->setOriginName($file_name);
- $this->getMyStorage()->setOriginContent($content);
- $this->getMyStorage()->setOriginType($media_type);
- $this->getMyStorage()->setOriginSequence($file_sequence);
- return $this->getMyStorage()->save();
+ $storage = $this->createMyStorage();
+ $storage->setOriginName($file_name);
+ $storage->setOriginContent($content);
+ $storage->setOriginType($media_type);
+ $storage->setOriginSequence($file_sequence);
+ return $storage->save();
}
//Yamap ViewPage의 이미지나영상데이터가 있으면 Dodownload 한다.
private function media_download(string $media_type, string $url): array
@@ -95,7 +96,7 @@ abstract class MyCrawler extends CommonLibrary
}
final protected function media_process(array $media_urls): array
{
- log_message("debug", var_export($media_urls, true));
+ // log_message("debug", var_export($media_urls, true));
$file_sequence = 1;
$storages = []; //CreateBoard에서 사용을 위해 DetailPage마다 초기화
// log_message("debug", var_export($urls, true));
@@ -108,7 +109,7 @@ abstract class MyCrawler extends CommonLibrary
log_message("notice", __FUNCTION__ . " MediaType->{$media_type} 작업 완료");
} catch (\Exception $e) {
log_message("warning", sprintf(
- "\n---%s mediaType->%s 오류---\n%s\n-----------------------------------------\n",
+ "\n---%s MediaType->%s 오류---\n%s\n-----------------------------------------\n",
__FUNCTION__,
$media_type,
$e->getMessage()
@@ -116,6 +117,11 @@ abstract class MyCrawler extends CommonLibrary
}
}
}
+ $i = 1;
+ foreach ($storages as $storage) {
+ log_message("debug", __FUNCTION__ . " 결과{$i}:" . $storage->getOriginName());
+ $i++;
+ }
return $storages;
}
protected function main_process(int $max_limit, array $listInfos): void
diff --git a/app/Libraries/MyCrawler/YamapCrawler.php b/app/Libraries/MyCrawler/YamapCrawler.php
index 8826abb..b26eb04 100644
--- a/app/Libraries/MyCrawler/YamapCrawler.php
+++ b/app/Libraries/MyCrawler/YamapCrawler.php
@@ -7,28 +7,21 @@ use App\Libraries\MySocket\WebSocket;
use App\Libraries\MyStorage\MangboardStorage;
use App\Models\Mangboard\BoardModel;
use App\Models\Mangboard\BoardsModel;
-use App\Models\Mangboard\FileModel;
-use App\Traits\ImageTrait;
use Symfony\Component\DomCrawler\Crawler;
class YamapCrawler extends MyCrawler
{
- use ImageTrait;
private $_category = "";
private $_user_entity = null;
- private $_myStorage = null;
public function __construct(string $host, string $category, UserEntity $user_entity)
{
parent::__construct(new WebSocket($host));
$this->_category = $category;
$this->_user_entity = $user_entity;
}
- final protected function getMyStorage()
+ final protected function createMyStorage()
{
- if ($this->_myStorage === null) {
- $this->_myStorage = new MangboardStorage($this->_category);
- }
- return $this->_myStorage;
+ return new MangboardStorage($this->_category, $this->_user_entity);
}
//작성내용
//
@@ -74,9 +67,6 @@ class YamapCrawler extends MyCrawler
$baord_name = "board_" . $this->_category;
$boardsModel = new BoardsModel();
$boards_entity = $boardsModel->getEntityByID("board_" . $this->_category);
- if ($boards_entity === null) {
- throw new \Exception("boards에서 {$baord_name} 해당정보를 찾을수 없습니다.");
- }
$boardModel = new BoardModel("mb_" . $baord_name);
$board_entity = $boardModel->createByCrawler(
$boards_entity,
@@ -85,18 +75,20 @@ class YamapCrawler extends MyCrawler
$listInfo,
$storages
);
- if ($board_entity === null) {
- throw new \Exception("{$baord_name} 생성에 오류가 발생했습니다.");
+ foreach ($storages as $storage) {
+ try {
+ $storage->backend($boards_entity, $board_entity, $boardModel->getTable());
+ } catch (\Exception $e) {
+ log_message("notice", sprintf(
+ "\n---%s -> %s 게시물의 %s번째:%s 파일 등록 오류---\n%s\n--------------------------------\n",
+ __FUNCTION__,
+ $board_entity->getTitle(),
+ $storage->getOriginSequence(),
+ $storage->getOriginName(),
+ $e->getMessage()
+ ));
+ }
}
- $fileModel = new FileModel();
- $fileModel->createByCrawler(
- $boards_entity,
- $this->_user_entity,
- $board_entity,
- $boardModel->getTable(),
- $storages
- );
- $this->create_small_ImageTrait($board_entity, $storages);
}
public function execute(int $max_limit): void
{
diff --git a/app/Libraries/MyCrawler/YamoonCrawler.php b/app/Libraries/MyCrawler/YamoonCrawler.php
index 56ad515..13d89f9 100644
--- a/app/Libraries/MyCrawler/YamoonCrawler.php
+++ b/app/Libraries/MyCrawler/YamoonCrawler.php
@@ -7,28 +7,21 @@ use App\Libraries\MySocket\WebSocket;
use App\Libraries\MyStorage\MangboardStorage;
use App\Models\Mangboard\BoardModel;
use App\Models\Mangboard\BoardsModel;
-use App\Models\Mangboard\FileModel;
-use App\Traits\ImageTrait;
use Symfony\Component\DomCrawler\Crawler;
class YamoonCrawler extends MyCrawler
{
- use ImageTrait;
private $_category = "";
private $_user_entity = null;
- private $_myStorage = null;
public function __construct(string $host, string $category, UserEntity $user_entity)
{
parent::__construct(new WebSocket($host));
$this->_category = $category;
$this->_user_entity = $user_entity;
}
- final protected function getMyStorage()
+ final protected function createMyStorage()
{
- if ($this->_myStorage === null) {
- $this->_myStorage = new MangboardStorage($this->_category);
- }
- return $this->_myStorage;
+ return new MangboardStorage($this->_category, $this->_user_entity);
}
protected function detail_page(int $cnt, array $listInfo): void
@@ -49,9 +42,6 @@ class YamoonCrawler extends MyCrawler
$baord_name = "board_" . $this->_category;
$boardsModel = new BoardsModel();
$boards_entity = $boardsModel->getEntityByID("board_" . $this->_category);
- if ($boards_entity === null) {
- throw new \Exception("boards에서 {$baord_name} 해당정보를 찾을수 없습니다.");
- }
$boardModel = new BoardModel("mb_" . $baord_name);
$board_entity = $boardModel->createByCrawler(
$boards_entity,
@@ -60,18 +50,20 @@ class YamoonCrawler extends MyCrawler
$listInfo,
$storages
);
- if ($board_entity === null) {
- throw new \Exception("{$baord_name} 생성에 오류가 발생했습니다.");
+ foreach ($storages as $storage) {
+ try {
+ $storage->backend($boards_entity, $board_entity, $boardModel->getTable());
+ } catch (\Exception $e) {
+ log_message("notice", sprintf(
+ "\n---%s -> %s 게시물의 %s번째:%s 파일 등록 오류---\n%s\n--------------------------------\n",
+ __FUNCTION__,
+ $board_entity->getTitle(),
+ $storage->getOriginSequence(),
+ $storage->getOriginName(),
+ $e->getMessage()
+ ));
+ }
}
- $fileModel = new FileModel();
- $fileModel->createByCrawler(
- $boards_entity,
- $this->_user_entity,
- $board_entity,
- $boardModel->getTable(),
- $storages
- );
- $this->create_small_ImageTrait($board_entity, $storages);
}
public function execute(int $max_limit): void
diff --git a/app/Libraries/MyStorage/MangboardStorage.php b/app/Libraries/MyStorage/MangboardStorage.php
index 5a16d3a..f3971c0 100644
--- a/app/Libraries/MyStorage/MangboardStorage.php
+++ b/app/Libraries/MyStorage/MangboardStorage.php
@@ -2,13 +2,30 @@
namespace App\Libraries\MyStorage;
+use App\Entities\Mangboard\BoardEntity;
+use App\Entities\Mangboard\BoardsEntity;
use App\Entities\Mangboard\UserEntity;
+use App\Models\Mangboard\FileModel;
+use App\Traits\ImageTrait;
class MangboardStorage extends FileStorage
{
- public function __construct(string $path)
+ use ImageTrait;
+ private $_category = "";
+ private $_user_entity = null;
+ private $_fileModel = null;
+ public function __construct(string $category, UserEntity $user_entity)
{
- parent::__construct($path);
+ parent::__construct($category);
+ $this->_category = $category;
+ $this->_user_entity = $user_entity;
+ }
+ final protected function getFileModel(): FileModel
+ {
+ if ($this->_fileModel === null) {
+ $this->_fileModel = new FileModel();
+ }
+ return $this->_fileModel;
}
final public function getBasePath(): string
{
@@ -56,4 +73,16 @@ class MangboardStorage extends FileStorage
));
return $content;
}
+
+ final public function backend(BoardsEntity $boards_entity, BoardEntity $board_entity, string $board_table)
+ {
+ $this->getFileModel()->createByCrawler(
+ $boards_entity,
+ $this->_user_entity,
+ $board_entity,
+ $board_table,
+ $this
+ );
+ $this->create_small_ImageTrait($board_entity, $this);
+ }
}
diff --git a/app/Models/Mangboard/FileModel.php b/app/Models/Mangboard/FileModel.php
index 4c31a0f..8ca8480 100644
--- a/app/Models/Mangboard/FileModel.php
+++ b/app/Models/Mangboard/FileModel.php
@@ -6,6 +6,7 @@ use App\Entities\Mangboard\BoardEntity;
use App\Entities\Mangboard\BoardsEntity;
use App\Entities\Mangboard\FileEntity;
use App\Entities\Mangboard\UserEntity;
+use App\Libraries\MyStorage\MangboardStorage;
use App\Models\CommonModel;
// +------------------+----------------------+------+-----+---------------------+----------------+
@@ -129,45 +130,33 @@ class FileModel extends CommonModel
UserEntity $user_entity,
BoardEntity $board_entity,
string $board_table,
- array $storages
- ): void {
- foreach ($storages as $storage) {
- try {
- //파일관리 table에 등록
- $formDatas = [];
- //Board PID 넣기
- $formDatas['board_pid'] = $board_entity->getPk();
- $formDatas['user_pid'] = $user_entity->getPK();
- $formDatas['user_name'] = $user_entity->getTitle();
- $formDatas['board_name'] = $boards_entity->getTitle();
- $formDatas['table_name'] = $board_table;
- $formDatas['file_path'] = $storage->getBasePath() . DIRECTORY_SEPARATOR . $storage->getPath() . DIRECTORY_SEPARATOR . $storage->getOriginName();
- $formDatas['file_name'] = $storage->getOriginName();
- $formDatas['file_type'] = $storage->getMimeType();
- $formDatas['file_caption'] = $storage->getOriginName();
- $formDatas['file_alt'] = $storage->getOriginName();
- $formDatas['file_description'] = "Filedata";
- $formDatas['file_size'] = $storage->getFileSize();
- $formDatas['file_sequence'] = $storage->getOriginSequence();
- $formDatas['reg_date'] = date("Y-m-d H:i:s");
- $entity = $this->create($formDatas);
- log_message("notice", sprintf(
- "%s -> %s 게시물의 %s번째:%s 파일 등록 완료",
- __FUNCTION__,
- $board_entity->getTitle(),
- $storage->getOriginSequence(),
- $entity->getTitle()
- ));
- } catch (\Exception $e) {
- log_message("notice", sprintf(
- "\n---%s -> %s 게시물의 %s번째:%s 파일 등록 오류---\n%s\n--------------------------------\n",
- __FUNCTION__,
- $board_entity->getTitle(),
- $storage->getOriginSequence(),
- $storage->getOriginName(),
- $e->getMessage()
- ));
- }
- }
+ MangboardStorage $storage
+ ): FileEntity {
+ //파일관리 table에 등록
+ $formDatas = [];
+ //Board PID 넣기
+ $formDatas['board_pid'] = $board_entity->getPk();
+ $formDatas['user_pid'] = $user_entity->getPK();
+ $formDatas['user_name'] = $user_entity->getTitle();
+ $formDatas['board_name'] = $boards_entity->getTitle();
+ $formDatas['table_name'] = $board_table;
+ $formDatas['file_path'] = $storage->getBasePath() . DIRECTORY_SEPARATOR . $storage->getPath() . DIRECTORY_SEPARATOR . $storage->getOriginName();
+ $formDatas['file_name'] = $storage->getOriginName();
+ $formDatas['file_type'] = $storage->getMimeType();
+ $formDatas['file_caption'] = $storage->getOriginName();
+ $formDatas['file_alt'] = $storage->getOriginName();
+ $formDatas['file_description'] = "Filedata";
+ $formDatas['file_size'] = $storage->getFileSize();
+ $formDatas['file_sequence'] = $storage->getOriginSequence();
+ $formDatas['reg_date'] = date("Y-m-d H:i:s");
+ $entity = $this->create($formDatas);
+ log_message("notice", sprintf(
+ "%s -> %s 게시물의 %s번째:%s 파일 등록 완료",
+ __FUNCTION__,
+ $board_entity->getTitle(),
+ $storage->getOriginSequence(),
+ $entity->getTitle()
+ ));
+ return $entity;
}
}
diff --git a/app/Traits/ImageTrait.php b/app/Traits/ImageTrait.php
index 95bc545..8e289b3 100644
--- a/app/Traits/ImageTrait.php
+++ b/app/Traits/ImageTrait.php
@@ -3,6 +3,7 @@
namespace App\Traits;
use App\Entities\Mangboard\BoardEntity;
+use App\Libraries\MyStorage\MangboardStorage;
trait ImageTrait
{
@@ -100,48 +101,35 @@ trait ImageTrait
imagedestroy($this->_image);
}
- public function create_small_ImageTrait(BoardEntity $board_entity, array $storages, $target_name = "small", int $width = 480, int $height = 319): void
+ public function create_small_ImageTrait(BoardEntity $board_entity, MangboardStorage $storage, $target_name = "small", int $width = 480, int $height = 319): void
{
- try {
- foreach ($storages as $storage) {
- $fileInfo = pathinfo($storage->getFullPath() . DIRECTORY_SEPARATOR . $storage->getOriginName(), PATHINFO_ALL);
- $target_file_name = sprintf("%s_%s.%s", $fileInfo['filename'], $target_name, $fileInfo['extension']);
- if (!$this->isFileType_FileTrait($fileInfo['extension'])) {
- throw new \Exception("{$storage->getOriginName()} Image 형식파일이 아닙니다.");
- }
- // 이미지 파일 로드
- $this->load_ImageTrait($storage->getFullPath() . DIRECTORY_SEPARATOR . $storage->getOriginName());
- // 200x200으로 이미지 크기 조정
- $this->resize_ImageTrait($width, $height);
- // 파일 저장
- $this->save_ImageTrait($storage->getFullPath() . DIRECTORY_SEPARATOR . $target_file_name);
- // 메모리 해제
- $this->destroy_ImageTrait();
- log_message("debug", sprintf(
- "%s %s->%s(W:%s,H:%s) 작업완료)",
- __FUNCTION__,
- $storage->getOriginName(),
- $target_file_name,
- $width,
- $height
- ));
- log_message("notice", sprintf(
- "%s -> %s 게시물의 %s번째:%s 작은이미지 생성 완료",
- __FUNCTION__,
- $board_entity->getTitle(),
- $storage->getOriginSequence(),
- $target_file_name
- ));
- }
- } catch (\Exception $e) {
- log_message("notice", sprintf(
- "\n---%s -> %s 게시물의 %s번째:%s 작은이미지 생성 오류---\n%s\n--------------------------------\n",
- __FUNCTION__,
- $board_entity->getTitle(),
- $storage->getOriginSequence(),
- $storage->getOriginName(),
- $e->getMessage()
- ));
+ $fileInfo = pathinfo($storage->getFullPath() . DIRECTORY_SEPARATOR . $storage->getOriginName(), PATHINFO_ALL);
+ $target_file_name = sprintf("%s_%s.%s", $fileInfo['filename'], $target_name, $fileInfo['extension']);
+ if (!$this->isFileType_FileTrait($fileInfo['extension'])) {
+ throw new \Exception("{$storage->getOriginName()} Image 형식파일이 아닙니다.");
}
+ // 이미지 파일 로드
+ $this->load_ImageTrait($storage->getFullPath() . DIRECTORY_SEPARATOR . $storage->getOriginName());
+ // 200x200으로 이미지 크기 조정
+ $this->resize_ImageTrait($width, $height);
+ // 파일 저장
+ $this->save_ImageTrait($storage->getFullPath() . DIRECTORY_SEPARATOR . $target_file_name);
+ // 메모리 해제
+ $this->destroy_ImageTrait();
+ log_message("debug", sprintf(
+ "%s %s->%s(W:%s,H:%s) 작업완료)",
+ __FUNCTION__,
+ $storage->getOriginName(),
+ $target_file_name,
+ $width,
+ $height
+ ));
+ log_message("notice", sprintf(
+ "%s -> %s 게시물의 %s번째:%s 작은이미지 생성 완료",
+ __FUNCTION__,
+ $board_entity->getTitle(),
+ $storage->getOriginSequence(),
+ $target_file_name
+ ));
}
}