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

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

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

【问题讨论】:

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

标签: php google-ads-api


【解决方案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,可以很好地处理基本内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        相关资源
        最近更新 更多