AdWords API 收取费用

Posted

技术标签:

【中文标题】AdWords API 收取费用【英文标题】:AdWords API get costs 【发布时间】:2011-01-08 14:08:27 【问题描述】:

我正在寻找一种简单的解决方案,通过 API 从 Google AdWords 中提取每日费用。我查看了Apility 和官方 AdWords API,但第一个不再维护,而第二个则有点过头了——我的意思是 76MB 的未压缩代码只能获得每日费用?

有人知道从 Google AdWords 收取费用的简单解决方案吗?

【问题讨论】:

大概你不需要编译所有 76MB 的空间,而且它会编译成更小的东西? 我想我应该指定我正在寻找一个 php 解决方案,所以没有什么可以编译 @AdrienHingert,您是否找到任何通过 API 从 Google AdWords 提取每日费用的方法,我面临同样的问题,没有任何合适的解决方案得到它,如果您找到任何解决方案,请发布 【参考方案1】:

如果您指的是 API 成本,则有 GetUnits 调用,在 AdWords API Tutorial 中使用。

如果您指的是运行广告系列费用,您可以使用StatsSelector。您将需要成本/微量。

【讨论】:

【参考方案2】:

使用

composer require googleads/googleads-php-lib

Laravel 5.8 脚本

Google Ads v201809

<?php namespace App\Console\Commands\Google;

use App\Model\AdvExpense;
use App\Model\Campaign;
use App\Model\Source;
use App\Service\Xml;
use Carbon\Carbon;
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\Reporting\v201809\DownloadFormat;
use Google\AdsApi\AdWords\Reporting\v201809\ReportDefinition;
use Google\AdsApi\AdWords\Reporting\v201809\ReportDefinitionDateRangeType;
use Google\AdsApi\AdWords\Reporting\v201809\ReportDownloader;
use Google\AdsApi\AdWords\v201809\cm\CampaignService;
use Google\AdsApi\AdWords\v201809\cm\DateRange;
use Google\AdsApi\AdWords\v201809\cm\OrderBy;
use Google\AdsApi\AdWords\v201809\cm\Paging;
use Google\AdsApi\AdWords\v201809\cm\ReportDefinitionReportType;
use Google\AdsApi\AdWords\v201809\cm\Selector;
use Google\AdsApi\AdWords\v201809\cm\SortOrder;
use Google\AdsApi\Common\OAuth2TokenBuilder;
use Illuminate\Console\Command;

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!');
                
            
        
    

【讨论】:

【参考方案3】:

您不应该使用 APILity,因为它支持的 API 版本在几年前就已经贬值了。该项目因支持新的官方 PHP AdWords API 库而停止。它的某些功能仍然有效(例如 AdWords 报告服务),但现在不会持续太久。

如果可能,我建议使用官方库,因为它使开发和升级变得非常简单,但是如果您真的需要更轻的占用空间,您可以尝试使用标准 PHP Soap 扩展自己构建 API 调用。

【讨论】:

感谢 ewan,事实是官方 api 对于我需要做的事情来说看起来有点过头了。你知道任何关于如何将其精简到最低限度的教程吗? 你有没有找到过这方面的教程?我写了一些代码来做这件事,但它比预期的要难,我现在找不到它:P【参考方案4】:

我推荐 AdWords 脚本,https://developers.google.com/adwords/scripts/。直接在 AdWords UI 中编写 javascript,可以很好地处理基本内容。

【讨论】:

以上是关于AdWords API 收取费用的主要内容,如果未能解决你的问题,请参考以下文章