Automation init...
This commit is contained in:
parent
4ee7090ffb
commit
d3b9be4ab6
@ -22,7 +22,7 @@ $routes->group('/user', function ($routes) {
|
|||||||
|
|
||||||
$routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) {
|
$routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) {
|
||||||
$routes->cli('mangboard/level', 'Mangboard::level');
|
$routes->cli('mangboard/level', 'Mangboard::level');
|
||||||
$routes->cli('crawl/yamap', 'Crawl::yamap');
|
$routes->cli('crawler/yamap', 'Crawler::yamap');
|
||||||
});
|
});
|
||||||
|
|
||||||
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
||||||
|
|||||||
@ -41,7 +41,7 @@ class UserController extends AdminController
|
|||||||
$entity = $this->setUserPointByMangboardTrait($entity, intval($point), $sign);
|
$entity = $this->setUserPointByMangboardTrait($entity, intval($point), $sign);
|
||||||
return "완료되었습니다.";
|
return "완료되었습니다.";
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
log_message('error', $e->getMessage());
|
log_message("error", $e->getMessage());
|
||||||
return $e->getMessage();
|
return $e->getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Controllers\CLI;
|
|
||||||
|
|
||||||
use App\Libraries\CrawlerLibrary;
|
|
||||||
use App\Controllers\BaseController;
|
|
||||||
|
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
|
||||||
|
|
||||||
class Crawl extends BaseController
|
|
||||||
{
|
|
||||||
public function yamap()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$library = new CrawlerLibrary("https://www.yamap16.com");
|
|
||||||
echo "Host-> " . $library->getHost() . "\n";
|
|
||||||
$html = $library->getInnerHTML("/Board/List.aspx?id=free&ca=1");
|
|
||||||
$links = $library->getLinks($html, "a.list_subject");
|
|
||||||
$html = $library->getInnerHTML($links[27], "div.contents p");
|
|
||||||
$images = $library->getImages($html);
|
|
||||||
var_dump($images);
|
|
||||||
// file_put_contents("test.jpg", $url);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
31
app/Controllers/CLI/Crawler.php
Normal file
31
app/Controllers/CLI/Crawler.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Controllers\CLI;
|
||||||
|
|
||||||
|
use App\Libraries\CrawlerLibrary;
|
||||||
|
use App\Controllers\BaseController;
|
||||||
|
|
||||||
|
class Crawler extends BaseController
|
||||||
|
{
|
||||||
|
public function yamap()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$library = new CrawlerLibrary("https://www.yamap16.com");
|
||||||
|
echo "Host-> " . $library->getHost() . "\n";
|
||||||
|
// $html = $library->getInnerHTML("/Board/List.aspx?id=free&ca=1");
|
||||||
|
// $links = $library->getLinks($html, "a.list_subject");
|
||||||
|
$url = "/Board/View.aspx?id=free&ca=1&rno=192681&page=1";
|
||||||
|
$html = $library->getInnerHTML($url, "div.contents p");
|
||||||
|
$images = $library->getImages($html);
|
||||||
|
foreach ($images as $image) {
|
||||||
|
echo "Image-> " . $image . "\n";
|
||||||
|
$library->download($image);
|
||||||
|
}
|
||||||
|
log_message("info", "완료되었습니다.");
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
log_message("error", $e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -19,10 +19,10 @@ class Mangboard extends BaseController
|
|||||||
$entity = $this->setUserLevelByMangboardTrait($entity);
|
$entity = $this->setUserLevelByMangboardTrait($entity);
|
||||||
log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Level은 {$entity->getLevel()} 입니다.");
|
log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Level은 {$entity->getLevel()} 입니다.");
|
||||||
}
|
}
|
||||||
log_message('info', "완료되었습니다.");
|
log_message("info", "완료되었습니다.");
|
||||||
return true;
|
return true;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
log_message('error', $e->getMessage());
|
log_message("error", $e->getMessage());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,32 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Libraries;
|
namespace App\Libraries;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
class CrawlerLibrary
|
class CrawlerLibrary extends WebBaseLibrary
|
||||||
{
|
{
|
||||||
private $_client = null;
|
|
||||||
private $_host = "";
|
|
||||||
public function __construct(string $host)
|
public function __construct(string $host)
|
||||||
{
|
{
|
||||||
$this->_host = $host;
|
parent::__construct($host);
|
||||||
}
|
}
|
||||||
|
|
||||||
final public function getHost(): string
|
|
||||||
{
|
|
||||||
return $this->_host;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getClient(): Client
|
|
||||||
{
|
|
||||||
if (is_null($this->_client)) {
|
|
||||||
$this->_client = new Client(['verify' => false]);
|
|
||||||
}
|
|
||||||
return $this->_client;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
final public function getContent(string $url): string
|
final public function getContent(string $url): string
|
||||||
{
|
{
|
||||||
$response = $this->getClient()->request('GET', $this->gethost() . $url);
|
$response = $this->getClient()->request('GET', $this->gethost() . $url);
|
||||||
|
|||||||
@ -1,47 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Libraries;
|
|
||||||
|
|
||||||
class LoginLibrary
|
|
||||||
{
|
|
||||||
private $url;
|
|
||||||
private $credentials;
|
|
||||||
private $cookieFile;
|
|
||||||
|
|
||||||
// $credentials = [
|
|
||||||
// 'username' => 'your_username',
|
|
||||||
// 'password' => 'your_password'
|
|
||||||
// ];
|
|
||||||
|
|
||||||
public function __construct(string $url, array $credentials)
|
|
||||||
{
|
|
||||||
$this->url = $url;
|
|
||||||
$this->credentials = $credentials;
|
|
||||||
$this->cookieFile = tempnam(sys_get_temp_dir(), 'cookie'); // 임시 쿠키 파일 생성
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute()
|
|
||||||
{
|
|
||||||
$ch = curl_init($this->url);
|
|
||||||
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($this->credentials));
|
|
||||||
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookieFile); // 쿠키를 저장할 파일 지정
|
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCookie()
|
|
||||||
{
|
|
||||||
return $this->cookieFile;
|
|
||||||
}
|
|
||||||
public function clearCookie()
|
|
||||||
{
|
|
||||||
// 쿠키 파일 삭제
|
|
||||||
unlink($this->cookieFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
93
app/Libraries/WebBaseLibrary.php
Normal file
93
app/Libraries/WebBaseLibrary.php
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Libraries;
|
||||||
|
|
||||||
|
use GuzzleHttp\Cookie\CookieJar;
|
||||||
|
use GuzzleHttp\Client;
|
||||||
|
|
||||||
|
abstract class WebBaseLibrary
|
||||||
|
{
|
||||||
|
private $_host = "";
|
||||||
|
private $_client = null;
|
||||||
|
private $_cookieJar = null;
|
||||||
|
protected function __construct(string $host)
|
||||||
|
{
|
||||||
|
$this->_host = $host;
|
||||||
|
}
|
||||||
|
|
||||||
|
final public function getHost(): string
|
||||||
|
{
|
||||||
|
return $this->_host;
|
||||||
|
}
|
||||||
|
|
||||||
|
final protected function getClient(): Client
|
||||||
|
{
|
||||||
|
if ($this->_client === null) {
|
||||||
|
$this->_client = new Client(['verify' => false]);
|
||||||
|
}
|
||||||
|
return $this->_client;
|
||||||
|
}
|
||||||
|
|
||||||
|
final protected function getCookieJar()
|
||||||
|
{
|
||||||
|
if ($this->_cookieJar === null) {
|
||||||
|
$this->_cookieJar = new CookieJar();
|
||||||
|
}
|
||||||
|
return $this->_cookieJar;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 로그인 메서드
|
||||||
|
public function login($url, $username, $password)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$response = $this->getClient()->post($this->gethost() . $url, [
|
||||||
|
'form_params' => [
|
||||||
|
'username' => $username,
|
||||||
|
'password' => $password,
|
||||||
|
],
|
||||||
|
'cookies' => $this->getCookieJar(),
|
||||||
|
]);
|
||||||
|
if ($response->getStatusCode() == 200) {
|
||||||
|
log_message("info", "로그인 성공!");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
log_message("info", "로그인 실패: " . $response->getStatusCode());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
log_message("error", "파일 다운로드 중 오류 발생: " . $e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 파일 다운로드 메서드
|
||||||
|
public function download($url, $addPath = false)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$fullPath = WRITEPATH . "uploads";
|
||||||
|
$fullPath .= !$addPath ? '' : DIRECTORY_SEPARATOR . $addPath;
|
||||||
|
if (!is_dir($fullPath)) {
|
||||||
|
mkdir($fullPath);
|
||||||
|
}
|
||||||
|
$temps = explode('/', $url);
|
||||||
|
if (!is_array($temps) || !count($temps)) {
|
||||||
|
throw new \Exception("URL error:" . var_dump($temps, true));
|
||||||
|
}
|
||||||
|
$file = $fullPath . DIRECTORY_SEPARATOR . array_pop($temps);
|
||||||
|
$response = $this->getClient()->get($this->gethost() . $url, [
|
||||||
|
'cookies' => $this->getCookieJar(),
|
||||||
|
'sink' => $file,
|
||||||
|
]);
|
||||||
|
if ($response->getStatusCode() == 200) {
|
||||||
|
log_message("info", "파일이 성공적으로 다운로드되었습니다!");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
log_message("info", "파일 다운로드 실패: " . $response->getStatusCode());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
log_message("error", "파일 다운로드 중 오류 발생: " . $e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user