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 获取广告系列统计信息(例如点击次数、点击率、每次点击费用等)