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 收取费用的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Google AdWords API v201309 检索每日费用?

如何使用 Adwords Api 在一次通话中获取每日费用报告

“ORDER BY”子句和平均每次点击费用计算中的 Google Adwords API 问题

通过 AdWords API 获取广告系列统计信息(例如点击次数、点击率、每次点击费用等)

使用 python 获取“成本”google adwords api

如何使用相同的 Google Adwords API 服务获得平均搜索量和平均 CPC?