GetCampaigns.php 5.1 KB
<?php
namespace App\Service\Requests\Direct;

use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
use App\Service\Requests\DirectRequest;

class GetCampaigns extends DirectRequest{
    protected $next;
    protected $timestamp;

    function call($next = null, $response = null){
        $this->next = $next;
        $this->requestPrepare($response);
        $process = new ProcessCallLimitedAPI($this);
        dispatch($process)->onQueue('limits');
    }

    function handle($response){
        $data = [];
        foreach ($response['result']['Campaigns'] as $campaign){
            $data[] = [
                'external_id'   =>  $campaign['Id'],
                'TimeTargeting'   =>  json_encode($campaign['TimeTargeting']),
                'NegativeKeywords'   =>  !empty($campaign['NegativeKeywords']['Items']) ?implode("\n", $campaign['NegativeKeywords']['Items']):'',
                'BlockedIps'   =>  !empty($campaign['BlockedIps']['Items']) ?implode("\n", $campaign['BlockedIps']['Items']):'',
                'ExcludedSites'   =>  !empty($campaign['ExcludedSites']['Items']) ?implode("\n", $campaign['ExcludedSites']['Items']):'',
                'DailyBudget'   =>  json_encode($campaign['DailyBudget']),
                'TextCampaignStrategySearch'   =>  $campaign['TextCampaign']['BiddingStrategy']['Search']['BiddingStrategyType'],
                'TextCampaignStrategyNetwork'   =>  $campaign['TextCampaign']['BiddingStrategy']['Network']['BiddingStrategyType'],
                'Settings'   =>  json_encode($campaign['TextCampaign']['Settings']),
                'CounterIds'   =>  !empty($campaign['TextCampaign']['CounterIds']['Items']) ? implode("\n", $campaign['TextCampaign']['CounterIds']['Items']): '',
                'RelevantKeywordsSettingBudgetPercent'   =>  $campaign['TextCampaign']['RelevantKeywords']['BudgetPercent'],
                'RelevantKeywordsSettingOptimizeGoalId'   =>  $campaign['TextCampaign']['RelevantKeywords']['OptimizeGoalId'],
                'AttributionModel'   =>  $campaign['TextCampaign']['AttributionModel'],
                'PriorityGoals'   =>  json_encode($campaign['TextCampaign']['PriorityGoals']),
            ];
print_r($campaign['Name']);
            $camp = Campaigns::firstOrCreate([
                'external_id'   =>  $campaign['Id']
            ],[
                'Name'   =>  $campaign['Name'],
//                'TimeTargeting'   =>  json_encode($campaign['TimeTargeting']),
//                'NegativeKeywords'   =>  implode("\n", $campaign['NegativeKeywords']['Items']),
//                'BlockedIps'   =>  implode("\n", $campaign['BlockedIps']['Items']),
//                'ExcludedSites'   =>  implode("\n", $campaign['BlockedIps']['Items']),
//                'DailyBudget'   =>  json_encode($campaign['DailyBudget']),
//                'TextCampaignStrategySearch'   =>  $campaign['TextCampaign']['BiddingStrategy']['Search']['BiddingStrategyType'],
//                'TextCampaignStrategyNetwork'   =>  $campaign['TextCampaign']['BiddingStrategy']['[Network']['BiddingStrategyType'],
//                'Settings'   =>  json_encode($campaign['TextCampaign']['Settings']),
//                'CounterIds'   =>  implode("\n", $campaign['TextCampaign']['CounterIds']['Items']),
//                'RelevantKeywordsSettingBudgetPercent'   =>  $campaign['TextCampaign']['RelevantKeywords']['BudgetPercent'],
//                'RelevantKeywordsSettingOptimizeGoalId'   =>  $campaign['TextCampaign']['RelevantKeywords']['OptimizeGoalId'],
//                'AttributionModel'   =>  $campaign['TextCampaign']['AttributionModel'],
//                'PriorityGoals'   =>  json_encode($campaign['TextCampaign']['PriorityGoals']),
            ]);
            $camp->Name = $campaign['Name'];
            $camp->save();
        }
        Campaigns::upsert($data, [
            'external_id'
        ],[
            'Name',
//            'TimeTargeting',
//            'NegativeKeywords',
//            'BlockedIps',
//            'ExcludedSites',
//            'DailyBudget',
//            'TextCampaignStrategySearch',
//            'TextCampaignStrategyNetwork',
//            'Settings',
//            'CounterIds',
//            'RelevantKeywordsSettingBudgetPercent',
//            'RelevantKeywordsSettingOptimizeGoalId',
//            'AttributionModel',
        ]);
    }

    private function requestPrepare($response){
        $this->setService('campaigns');
        $this->setMethod('get');
        $this->setTimestamp($response);
        $params = [
            'SelectionCriteria' =>  [
                'Types' =>  ["TEXT_CAMPAIGN"]
            ],
            "FieldNames"    =>  [
                "Id", "Name", "TimeTargeting", "TimeZone", "NegativeKeywords", "BlockedIps", "ExcludedSites", "DailyBudget"
            ],
            "TextCampaignFieldNames"    =>  [
                "BiddingStrategy", "Settings", "CounterIds", "RelevantKeywords", "PriorityGoals", "AttributionModel"
            ]
        ];
        $this->setParams($params);
    }

    private function setTimestamp($response){
        $this->timestamp = $response['result']['Timestamp'] ?? '';
    }

}