Я ищу простое решение для извлечения ежедневных расходов из Google AdWords через API. Я просмотрел Apility и официальный API AdWords, но первый больше не поддерживается, а второй - излишний - я имею в виду 76 МБ несжатого кода только для ежедневных затрат?
Кто-нибудь знает простое решение, чтобы получить расходы от Google AdWords?
4 ответа
Если вы имеете в виду стоимость API, есть вызов GetUnits, используемый в API AdWords. Учебник.
Если вы имеете в виду текущие расходы на кампанию, вы можете использовать Выбор статистики. Вам понадобится стоимость/микросумма.
Использовать
composer require googleads/googleads-php-lib
Скрипт для Laravel 5.8
Google Реклама 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!');
}
}
}
}
}
Вы не должны использовать APILity, так как поддерживаемая им версия API устарела несколько лет назад. Проект был остановлен в пользу новой официальной библиотеки PHP AdWords API. Некоторые его функции все еще работают (например, служба отчетов AdWords), но это не продлится слишком долго.
Я бы порекомендовал использовать официальную библиотеку, если это возможно, потому что она значительно упрощает разработку и обновление, но если вам действительно нужно меньше места, вы можете попробовать создать вызовы API самостоятельно, используя стандартное расширение PHP Soap.
Я бы рекомендовал скрипты AdWords, https://developers.google.com/adwords/scripts/. Пишите Javascript прямо в пользовательском интерфейсе AdWords, довольно хорошо справляется с основными задачами.
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.