Files
2025-03-05 14:02:29 +09:00

162 lines
6.4 KiB
PHP

<?php
namespace App\Controllers\Advertisement;
use App\ThirdParty\facebook_api\ZenithFB;
use App\Libraries\slack_api\SlackChat;
use CodeIgniter\CLI\CLI;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use DateInterval;
use DatePeriod;
class Facebook extends Controller
{
private $zenith;
private $slack;
public function __construct()
{
$this->zenith = new ZenithFB();
$this->slack = new SlackChat();
}
public function initController(
RequestInterface $request,
ResponseInterface $response,
LoggerInterface $logger
) {
$date = "";
$today = date('Y-m-d');
$argv = @$request->getServer()['argv'];
if(!is_null($argv)) {
$method = $argv[2];
$params = @array_slice($argv, 3);
if(!@count($params)) return;
foreach($params as $v) {
$value = preg_replace('/[^0-9\-]+/', '', $v);
if(preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $value)) { //request argument에 날짜형식이 있는지 체크
$date = $v;
break;
}
}
/*
$hour = date("G"); //24-hour format of an hour without leading zeros
if($date == $today && ($hour >= 0 && $hour <= 7)) {
CLI::write("당일 0시~8시는 자동업데이트를 사용할 수 없습니다.", "light_purple");
exit;
}
*/
}
}
public function getAccounts() {
$this->zenith->updateAdAccounts();
}
public function getLongLivedAccessToken() {
$this->zenith->getLongLivedAccessToken();
}
public function getInsight($all=null, $date=null, $edate=null) {
CLI::clearScreen();
if($all == null)
$all = CLI::prompt("인사이트가 수신된 캠페인,광고그룹,광고 데이터를 함께 수신하시겠습니까?\n(시간이 오래 걸릴 수 있습니다.)", ["true","false"]);
if($date == null)
$date = CLI::prompt("인사이트를 수신할 기간 중 시작날짜를 입력해주세요.", date('Y-m-d'));
if($edate == null)
$edate = CLI::prompt("인사이트를 수신할 기간 중 종료날짜를 입력해주세요.", $date);
// $run = CLI::prompt("광고데이터를 ".($all=="true"?"포함":"미포함")."하여 {$date} ~ {$edate} 기간의 인사이트를 수신합니다.",["y","n"]);
// if($run != 'y') return false;
$this->zenith->getAsyncInsights($all, $date, $edate);
CLI::write("데이터 수신이 완료되었습니다.", "yellow");
}
public function adLeadByAd($ad_id = null, $from = null, $to = null) {
CLI::clearScreen();
if($ad_id == null)
$ad_id = CLI::prompt("잠재고객 업데이트 할 광고ID를 입력해주세요.");
if($from == null)
$from = CLI::prompt("잠재고객 업데이트 할 시작날짜를 입력해주세요.", date('Y-m-d'));
if($to == null)
$to = CLI::prompt("잠재고객 업데이트 할 종료날짜를 입력해주세요.", $from);
$result = $this->zenith->adLeadByAd($ad_id, $from, $to);
CLI::write("잠재고객 업데이트 완료되었습니다.", "yellow");
}
public function getAdLead($from = null, $to = null) {
CLI::clearScreen();
if($from == null)
$from = CLI::prompt("잠재고객 업데이트 할 시작날짜를 입력해주세요.", date('Y-m-d'));
if($to == null)
$to = CLI::prompt("잠재고객 업데이트 할 종료날짜를 입력해주세요.", date('Y-m-d'));
// $run = CLI::prompt("{$from}~{$to}일자의 잠재고객을 업데이트 합니다.",["y","n"]);
// if($run != 'y') return false;
$this->zenith->getAdLead($from, $to);
}
public function updateAll() {
CLI::clearScreen();
// $run = CLI::prompt("캠페인/광고그룹/광고를 업데이트 합니다.",["y","n"]);
// if($run != 'y') return false;
CLI::write("캠페인/광고그룹/광고를 업데이트 합니다.", "light_red");
$this->zenith->updateAllByAccounts();
/*
$getAds = $this->zenith->getAds();
$updateAdsets = $this->zenith->updateAdsets($getAds);
$updateCampaigns = $this->zenith->updateCampaigns($updateAdsets);
*/
}
public function updateDB($sdate = null, $edate = null) {
CLI::clearScreen();
if($sdate == null)
$sdate = CLI::prompt("유효DB 업데이트 할 시작날짜를 입력해주세요.", date('Y-m-d'));
if($edate == null)
$edate = CLI::prompt("유효DB 업데이트 할 종료날짜를 입력해주세요.", $sdate);
$sdate = date_create($sdate);
$edate = date_create(date('Y-m-d', strtotime($edate.'+1 days')));
$interval = DateInterval::createFromDateString('1 day');
$date_range = new DatePeriod($sdate, $interval, $edate);
foreach($date_range as $date) {
$date = $date->format('Y-m-d');
CLI::write("{$date} 유효DB를 업데이트 합니다.", "light_red");
$this->zenith->getAdsUseLanding($date);
}
}
public function updateCampaign() {
$campaign_id = CLI::prompt("업데이트 할 캠페인 ID를 입력해주세요.", null);
if(is_null($campaign_id)) return;
$data = [
['campaign_id'=>$campaign_id]
];
$campaign = $this->zenith->updateCampaigns($data);
print_r($campaign);
}
public function updateAds() {
CLI::clearScreen();
// $run = CLI::prompt("광고를 업데이트 합니다.",["y","n"]);
// if($run != 'y') return false;
CLI::write("광고를 업데이트 합니다.", "light_red");
$this->zenith->updateAds();
}
public function updateAdCreatives() {
CLI::clearScreen();
$ad_id = CLI::prompt("업데이트 할 광고 ID를 입력해주세요.", null);
if(is_null($ad_id)) return;
$data = [
['id'=>$ad_id]
];
// $run = CLI::prompt("광고를 업데이트 합니다.",["y","n"]);
// if($run != 'y') return false;
CLI::write("광고소재를 업데이트 합니다.", "light_red");
$adcreative = $this->zenith->updateAdCreatives($data);
print_r($adcreative);
}
}