Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- composer require googleads/googleads-php-lib
- <?php namespace AppConsoleCommandsGoogle;
- use AppModelAdvExpense;
- use AppModelCampaign;
- use AppModelSource;
- use AppServiceXml;
- use CarbonCarbon;
- use GoogleAdsApiAdWordsAdWordsServices;
- use GoogleAdsApiAdWordsAdWordsSession;
- use GoogleAdsApiAdWordsAdWordsSessionBuilder;
- use GoogleAdsApiAdWordsReportingv201809DownloadFormat;
- use GoogleAdsApiAdWordsReportingv201809ReportDefinition;
- use GoogleAdsApiAdWordsReportingv201809ReportDefinitionDateRangeType;
- use GoogleAdsApiAdWordsReportingv201809ReportDownloader;
- use GoogleAdsApiAdWordsv201809cmCampaignService;
- use GoogleAdsApiAdWordsv201809cmDateRange;
- use GoogleAdsApiAdWordsv201809cmOrderBy;
- use GoogleAdsApiAdWordsv201809cmPaging;
- use GoogleAdsApiAdWordsv201809cmReportDefinitionReportType;
- use GoogleAdsApiAdWordsv201809cmSelector;
- use GoogleAdsApiAdWordsv201809cmSortOrder;
- use GoogleAdsApiCommonOAuth2TokenBuilder;
- use IlluminateConsoleCommand;
- class Expenses extends Command
- {
- /**
- * The name and signature of the console command
- *
- * @var string
- */
- protected $signature = 'google:expenses';
- /**
- * The console command name.
- *
- * @var string
- */
- protected $name = 'Import Google Ads Expenses';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = "Import Google Ads Expenses";
- public function handle()
- {
- $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile(storage_path('adsapi_php.ini'))->build();
- $session = (new AdWordsSessionBuilder())->fromFile(storage_path('adsapi_php.ini'))->withOAuth2Credential($oAuth2Credential)->build();
- $date = Carbon::yesterday();
- $this->saveExpenses($session, $date);
- }
- public function saveExpenses($session, $date)
- {
- // Create selector.
- $selector = new Selector();
- $selector->setFields(['CampaignId', 'CampaignName', 'Clicks', 'Cost']);
- $selector->setDateRange(new DateRange(
- $date->format('Ymd'),
- $date->format('Ymd')
- ));
- // Create report definition.
- $reportDefinition = new ReportDefinition();
- $reportDefinition->setSelector($selector);
- $reportDefinition->setReportName('Expenses report ' . uniqid());
- $reportDefinition->setDateRangeType(ReportDefinitionDateRangeType::CUSTOM_DATE);
- $reportDefinition->setReportType(ReportDefinitionReportType::CAMPAIGN_PERFORMANCE_REPORT);
- $reportDefinition->setDownloadFormat(DownloadFormat::XML);
- // Download report.
- $reportDownloader = new ReportDownloader($session);
- $reportDownloadResult = $reportDownloader->downloadReport($reportDefinition);
- $result = $reportDownloadResult->getAsString();
- $report = Xml::namespacedXMLToArray($result);
- foreach ($report['table']['row'] as $item) {
- $campaign_id = $item['@attributes']['campaignID'];
- $campaign_name = $item['@attributes']['campaign'];
- $cost = $item['@attributes']['cost'];
- if ($cost > 0) {
- $dbCampaign = Campaign::where('code', $campaign_id)->get()->first();
- if ($dbCampaign) {
- $price = round($cost / 1000000);
- if ($price) {
- $dbCost = AdvExpense::updateOrCreate(
- [
- 'campaign_id' => $dbCampaign->id,
- 'date' => $date,
- ],
- [
- 'price' => $price,
- ]
- );
- if ($dbCost->exists) {
- $this->info($dbCampaign->name . ' - ' . $date->format('Y-m-d') . ' - ' . $price . ' OK');
- } else {
- $this->error($dbCampaign->name . ' - ' . $date->format('Y-m-d') . ' - ' . $price . ' ERROR');
- }
- }
- } else {
- $this->error('Campaign ' . $campaign_name . ' not found!');
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement