Automation init...2

This commit is contained in:
최준흠 2024-09-09 11:01:32 +09:00
parent cb1b64126e
commit 7b7149fbc5
11 changed files with 217 additions and 280 deletions

View File

@ -15,10 +15,9 @@ $routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}
//2. Config/Filters.php -> $aliases = ['authFilter' => AuthFilter::class]
$routes->get('/', 'Home::index');
$routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) {
$routes->cli('mangboard/level', 'Mangboard::level');
$routes->cli('crawler/yamap', 'Crawler::yamap');
$routes->cli('crawler/yamap/(:any)', 'Crawler::yamap::/$1');
$routes->group('crawler', ['namespace' => 'App\Controllers\Crawler'], function ($routes) {
$routes->cli('yamap', 'YamapController::crawling');
$routes->cli('yamap/(:segment)', 'YamapController::crawling::/$1');
});
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
@ -32,14 +31,9 @@ $routes->group('mangboard', ['namespace' => 'App\Controllers\Mangboard'], functi
$routes->group('admin', ['namespace' => 'App\Controllers\Mangboard\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
$routes->group('/user', function ($routes) {
$routes->get('/', 'UserController::index');
// $routes->get('insert', 'UserController::form_insert');
// $routes->post('insert', 'UserController::insert');
// $routes->get('update', 'UserController::form_update');
// $routes->post('update', 'UserController::upadate');
// $routes->get('view', 'UserController::view');
// $routes->get('delete/', 'UserController::delete', ['filter' => 'authFilter:master']);
$routes->get('point', 'UserController::form_point', ['filter' => 'authFilter:master']);
$routes->post('point', 'UserController::point', ['filter' => 'authFilter:master']);
$routes->post('level', 'UserController::level', ['filter' => 'authFilter:master']);
});
});
});

View File

@ -1,24 +0,0 @@
<?php
namespace App\Controllers\CLI;
use App\Controllers\BaseController;
use App\Libraries\MyCrawler\YamapLibrary;
class Crawler extends BaseController
{
public function yamap(...$params): bool
{
try {
$isDebug = in_array("debug", $params);
$yamap = new YamapLibrary();
$yamap->setDebug($isDebug);
$yamap->execute();
log_message("notice", "Crawler->" . __FUNCTION__ . " 작업이 완료되었습니다.");
return true;
} catch (\Exception $e) {
log_message("error", $e->getMessage());
return false;
}
}
}

View File

@ -1,24 +0,0 @@
<?php
namespace App\Controllers\CLI;
use App\Libraries\Mangboard\UserLibrary;
use App\Controllers\BaseController;
class Mangboard extends BaseController
{
public function level(...$params): bool
{
try {
$isDebug = in_array("debug", $params);
$user = new UserLibrary();
$user->setDebug($isDebug);
$user->setLevel();
log_message("notice", "Mangboard->level 작업이 완료되었습니다.");
return true;
} catch (\Exception $e) {
log_message("error", $e->getMessage());
return false;
}
}
}

View File

@ -0,0 +1,49 @@
<?php
namespace App\Controllers\Crawler;
use App\Controllers\BaseController;
use App\Libraries\MyCrawler\YamapLibrary as MyCrawler;
class YamapController extends BaseController
{
public function crawling(...$params)
{
try {
$isDebug = in_array("debug", $params);
$crawler = new MyCrawler();
$crawler->setDebug($isDebug);
//1. 사이트 로그인 처리
$user = $crawler->login();
$crawler->getMyStorage()->setUser($user);
$items = [];
//2. 해당사이트 MainPage 처리
if ($crawler->getDebug()) {
$items[] = [
'title' => getenv("yamap.view.test.title"),
'nickname' => getenv("yamap.view.test.nickname"),
'detail_url' => getenv("yamap.view.test.url"),
'time' => date("Y-m-d H:i:s"),
'hit' => 1
];
} else {
$items = $crawler->mainPage(getenv("yamap.list.url"));
}
if (!count($items)) {
throw new \Exception("Yamap 사이트에서 게시물이 존재하지 않습니다.");
}
//최초 게시물만 등록하기 위함
$item = $items[0];
//3. DetailPage 처리 : bbs_view > div.contents 가진 객체를 찾아서 처리
$fileEntitys = $crawler->detailPage($item["detail_url"]);
//4.망보드 일반게시판에 게시물 등록 처리
$crawler->createBoard($item, $fileEntitys);
log_message("notice", "Crawler->" . __FUNCTION__ . " 작업이 완료되었습니다.");
return true;
} catch (\Exception $e) {
log_message("error", $e->getMessage());
return false;
}
}
}

View File

@ -2,8 +2,8 @@
namespace App\Controllers\Mangboard\Admin;
use App\Libraries\Mangboard\UserLibrary;
use App\Controllers\Admin\AdminController;
use App\Models\Mangboard\UserModel;
class UserController extends AdminController
{
@ -20,16 +20,30 @@ class UserController extends AdminController
public function point(): string
{
try {
$id = $this->request->getVar("id");
$point = intval($this->request->getVar("point"));
$sign = $this->request->getVar("point") ?? "+";
$id = $this->request->getPost("id");
$point = intval($this->request->getPost("point"));
$sign = $this->request->getPost("point") ?? "+";
$user = new UserLibrary();
$user->setPoint($id, $point, $sign);
$userModel = new UserModel();
$userModel->setPoint($id, $point, $sign);
return "완료되었습니다.";
} catch (\Exception $e) {
log_message("error", $e->getMessage());
return $e->getMessage();
}
}
public function level(...$params): bool
{
try {
$isDebug = in_array("debug", $params);
$userModel = new UserModel();
$userModel->setDebug($isDebug);
$userModel->setLevel();
log_message("notice", "Mangboard->level 작업이 완료되었습니다.");
return true;
} catch (\Exception $e) {
log_message("error", $e->getMessage());
return false;
}
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace App\Libraries\Mangboard;
use App\Libraries\CommonLibrary;
use App\Entities\Mangboard\BoardEntity;
class BoardLibrary extends CommonLibrary
{
private $_model = null;
public function __construct($model)
{
parent::__construct();
$this->_model = $model;
}
public function getModel(): mixed
{
return $this->_model;
}
public function create(BoardEntity $entity, array $formDatas = []): BoardEntity
{
$entity = $this->getModel()->create($entity, $formDatas);
log_message("debug", __FUNCTION__ . "=>등록이 완료되었습니다.");
return $entity;
}
}

View File

@ -1,98 +0,0 @@
<?php
namespace App\Libraries\Mangboard;
use App\Models\Mangboard\UserModel;
use App\Entities\Mangboard\UserEntity;
use App\Libraries\CommonLibrary;
class UserLibrary extends CommonLibrary
{
private $_model = null;
public function __construct()
{
parent::__construct();
}
public function getModel(): UserModel
{
if ($this->_model === null) {
return $this->_model = new UserModel();
}
return $this->_model;
}
private function checkLevel(UserEntity $entity): UserEntity
{
//Admin용 Level로는 변경불가
if ($entity->getLevel() == getenv('mangboard.admin.level')) {
// throw new \Exception("Admin용 Level을 변경하실수 없습니다.\n");
return $entity;
}
//사용자 Point별 Level 계산
$level = intval($entity->getPoint() / getenv('mangboard.point.unit') * getenv('mangboard.point.unit') / getenv('mangboard.point.unit'));
//운영자면 7~9
if (getenv('mangboard.manager.level.min') <= $level && $level <= getenv('mangboard.manager.level.max')) {
$level = $level < getenv('mangboard.manager.level.min') ? getenv('mangboard.manager.level.min') : $level;
$level = getenv('mangboard.manager.level.max') < $level ? getenv('mangboard.manager.level.max') : $level;
}
// echo "point:" . $entity->getPoint() . ",level:" . $level . "\n";
//사용자 Level 1~5;
if (getenv('mangboard.user.level.min') <= $level && $level <= getenv('mangboard.user.level.max')) {
$level = $level < getenv('mangboard.user.level.min') ? getenv('mangboard.user.level.min') : $level;
$level = getenv('mangboard.user.level.max') < $level ? getenv('mangboard.user.level.max') : $level;
}
// echo "point:" . $entity->getPoint() . ",level:" . $level . "\n";
//기존정보와 Level값이 다르면 저장
if ($entity->getLevel() != $level) {
$old_level = $entity->getLevel();
$entity->setLevel($level);
$entity = $this->getModel()->modify($entity);
log_message("notice", __FUNCTION__ . "=>{$entity}의 Level이 {$old_level}에서 {$entity->getLevel()}로 변경되었습니다.");
}
return $entity;
}
public function setPoint($id, int $point, $sign = '+'): UserEntity
{
$entity = is_numeric($id) ? $this->getModel()->getEntityByPK(intval($id)) : $this->getModel()->getEntityByID($id);
if (!$entity) {
throw new \Exception("해당 회원[{$id}]이 없습니다.");
}
switch ($sign) {
case '-':
if ($point < $point) {
throw new \Exception("기존포인트:{$point}가 감소 포인트:-{$point} 작습니다.\n");
}
$point = $point - $point;
break;
case '+':
$point = $point + $point;
break;
default:
throw new \Exception(__FUNCTION__ . "에서는 {$sign}은 사용할수 없습니다.\n");
// break;
}
//기존정보와 Point값이 다르면 저장
if ($entity->getPoint() != $point) {
$old_point = $entity->getPoint();
$entity->setPoint($point);
$entity = $this->getModel()->modify($entity);
log_message("notice", __FUNCTION__ . "=>{$entity}의 Point가 {$old_point}에서 {$entity->getPoint()}로 변경되었습니다.");
}
return $this->checkLevel($entity);
}
public function setLevel(): void
{
foreach ($this->getModel()->getEntitys() as $entity) {
$entity = $this->checkLevel($entity);
log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Level은 {$entity->getLevel()} 입니다.");
}
}
}

View File

@ -2,9 +2,8 @@
namespace App\Libraries\MyCrawler;
use Symfony\Component\DomCrawler\Crawler;
use App\Libraries\CommonLibrary;
use App\Entities\Mangboard\FileEntity;
use Symfony\Component\DomCrawler\Crawler;
abstract class MyCrawlerLibrary extends CommonLibrary
{
@ -12,9 +11,8 @@ abstract class MyCrawlerLibrary extends CommonLibrary
{
parent::__construct();
}
abstract protected function getMySocket();
abstract protected function getMyStorage();
abstract public function execute(): void;
abstract public function getMySocket();
abstract public function getMyStorage();
final protected function getContent(string $url, string $tag): Crawler
{

View File

@ -2,43 +2,30 @@
namespace App\Libraries\MyCrawler;
use Symfony\Component\DomCrawler\Crawler;
use App\Libraries\MySocket\WebLibrary as MySocketLibrary;
use App\Libraries\MyStorage\MangboardLibrary as MyStorageLibrary;
use App\Models\Mangboard\UserModel;
use App\Models\Mangboard\BoardModel;
use App\Libraries\MySocket\WebLibrary;
use App\Libraries\Mangboard\FileLibrary;
use App\Libraries\Mangboard\BoardLibrary;
use App\Entities\Mangboard\BoardEntity;
use App\Entities\Mangboard\UserEntity;
use Symfony\Component\DomCrawler\Crawler;
class YamapLibrary extends MyCrawlerLibrary
{
private $_userModel = null;
private $_boardModel = null;
private $_mySocket = null;
private $_myStorage = null;
private $_boardModel = null;
public function __construct()
{
parent::__construct();
}
protected function getMySocket(): WebLibrary
private function getUserModel(): UserModel
{
if ($this->_mySocket === null) {
$this->_mySocket = new WebLibrary(getenv('yamap.host.url'));
if ($this->_userModel === null) {
$this->_userModel = new UserModel();
}
return $this->_mySocket;
}
protected function getMyStorage(): FileLibrary
{
if ($this->_myStorage === null) {
$this->_myStorage = new FileLibrary(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;
return $this->_userModel;
}
private function getBoardModel(): BoardModel
{
@ -48,7 +35,40 @@ class YamapLibrary extends MyCrawlerLibrary
return $this->_boardModel;
}
private function mainPage(string $url): array
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 = [];
@ -74,7 +94,7 @@ class YamapLibrary extends MyCrawlerLibrary
return $items;
}
private function detailPage(string $url, array $fileEntitys = []): array
public function detailPage(string $url, array $fileEntitys = []): array
{
$crawler = $this->getContent($url, getenv("yamap.view.content.tag"));
//3. Image 처리
@ -83,11 +103,8 @@ class YamapLibrary extends MyCrawlerLibrary
return $this->download("video", $crawler, ["tag" => "video", "attr" => "src"], $fileEntitys);
}
private function createBoard(array $item, array $fileEntitys): BoardEntity
public function createBoard(array $item, array $fileEntitys): BoardEntity
{
$board = new BoardLibrary($this->getBoardModel());
$board->setDebug($this->getDebug());
//미디어관련정보 entity에 넣기
$entity = new BoardEntity();
$entity->title = $item["title"];
@ -113,7 +130,8 @@ class YamapLibrary extends MyCrawlerLibrary
// echo $entity->reg_date . "\n";
// exit;
//망보드 게시판에 등록
$entity = $board->create($entity);
$entity = $this->getBoardModel()->create($entity);
log_message("debug", __FUNCTION__ . "=>등록이 완료되었습니다.");
//망보드 파일관리툴에 등록된 파일게시물에 등록한 게시판번호 수정하기
foreach ($fileEntitys as $fileEntity) {
@ -121,41 +139,4 @@ class YamapLibrary extends MyCrawlerLibrary
}
return $entity;
}
public function execute(): void
{
//1. 사이트 로그인 처리
$userModel = new UserModel();
$user = $userModel->getEntityByID("idcjp");
// $daemonidc = new MyWebLibrary(getenv('daemonidc.host.url'));
// $daemonidc->setDebug($isDebug);
// $daemonidc->login(
// getenv('daemonidc.login.url'),
// getenv('daemonidc.login.user_id'),
// getenv('daemonidc.login.user_password')
// );
$this->getMyStorage()->setUser($user);
$items = [];
//2. 해당사이트 MainPage 처리
if ($this->getDebug()) {
$items[] = [
'title' => getenv("yamap.view.test.title"),
'nickname' => getenv("yamap.view.test.nickname"),
'detail_url' => getenv("yamap.view.test.url"),
'time' => date("Y-m-d H:i:s"),
'hit' => 1
];
} else {
$items = $this->mainPage(getenv("yamap.list.url"));
}
if (!count($items)) {
throw new \Exception("Yamap 사이트에서 게시물이 존재하지 않습니다.");
}
//최초 게시물만 등록하기 위함
$item = $items[0];
//3. DetailPage 처리 : bbs_view > div.contents 가진 객체를 찾아서 처리
$fileEntitys = $this->detailPage($item["detail_url"]);
//4.망보드 일반게시판에 게시물 등록 처리
$this->createBoard($item, $fileEntitys);
}
}

View File

@ -1,15 +1,15 @@
<?php
namespace App\Libraries\Mangboard;
namespace App\Libraries\MyStorage;
use App\Models\Mangboard\FileModel;
use App\Libraries\MyStorage\FileLibrary as MyStorageLibrary;
use App\Libraries\MyStorage\FileLibrary;
use App\Entities\Mangboard\UserEntity;
use App\Entities\Mangboard\FileEntity;
use App\Entities\Mangboard\BoardEntity;
class FileLibrary extends MyStorageLibrary
class MangboardLibrary extends FileLibrary
{
private $_user = null;
private $_boardName = "";

View File

@ -144,6 +144,80 @@ class UserModel extends CommonModel
return $this->getEntity();
}
private function checkLevel(UserEntity $entity): UserEntity
{
//Admin용 Level로는 변경불가
if ($entity->getLevel() == getenv('mangboard.admin.level')) {
// throw new \Exception("Admin용 Level을 변경하실수 없습니다.\n");
return $entity;
}
//사용자 Point별 Level 계산
$level = intval($entity->getPoint() / getenv('mangboard.point.unit') * getenv('mangboard.point.unit') / getenv('mangboard.point.unit'));
//운영자면 7~9
if (getenv('mangboard.manager.level.min') <= $level && $level <= getenv('mangboard.manager.level.max')) {
$level = $level < getenv('mangboard.manager.level.min') ? getenv('mangboard.manager.level.min') : $level;
$level = getenv('mangboard.manager.level.max') < $level ? getenv('mangboard.manager.level.max') : $level;
}
// echo "point:" . $entity->getPoint() . ",level:" . $level . "\n";
//사용자 Level 1~5;
if (getenv('mangboard.user.level.min') <= $level && $level <= getenv('mangboard.user.level.max')) {
$level = $level < getenv('mangboard.user.level.min') ? getenv('mangboard.user.level.min') : $level;
$level = getenv('mangboard.user.level.max') < $level ? getenv('mangboard.user.level.max') : $level;
}
// echo "point:" . $entity->getPoint() . ",level:" . $level . "\n";
//기존정보와 Level값이 다르면 저장
if ($entity->getLevel() != $level) {
$old_level = $entity->getLevel();
$entity->setLevel($level);
$entity = $this->modify($entity);
log_message("notice", __FUNCTION__ . "=>{$entity}의 Level이 {$old_level}에서 {$entity->getLevel()}로 변경되었습니다.");
}
return $entity;
}
public function setPoint($id, int $point, $sign = '+'): UserEntity
{
$entity = is_numeric($id) ? $this->getEntityByPK(intval($id)) : $this->getEntityByID($id);
if (!$entity) {
throw new \Exception("해당 회원[{$id}]이 없습니다.");
}
switch ($sign) {
case '-':
if ($point < $point) {
throw new \Exception("기존포인트:{$point}가 감소 포인트:-{$point} 작습니다.\n");
}
$point = $point - $point;
break;
case '+':
$point = $point + $point;
break;
default:
throw new \Exception(__FUNCTION__ . "에서는 {$sign}은 사용할수 없습니다.\n");
// break;
}
//기존정보와 Point값이 다르면 저장
if ($entity->getPoint() != $point) {
$old_point = $entity->getPoint();
$entity->setPoint($point);
$entity = $this->modify($entity);
log_message("notice", __FUNCTION__ . "=>{$entity}의 Point가 {$old_point}에서 {$entity->getPoint()}로 변경되었습니다.");
}
return $this->checkLevel($entity);
}
public function setLevel(): void
{
foreach ($this->getEntitys() as $entity) {
$entity = $this->checkLevel($entity);
log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Level은 {$entity->getLevel()} 입니다.");
}
}
//create용
public function create(UserEntity $entity): UserEntity
{