Я ищу простое решение для извлечения ежедневных расходов из Google AdWords через API. Я просмотрел Apility и официальный API AdWords, но первый больше не поддерживается, а второй - излишний - я имею в виду 76 МБ несжатого кода только для ежедневных затрат?

Кто-нибудь знает простое решение, чтобы получить расходы от Google AdWords?

2
Adrien Hingert 8 Янв 2011 в 17:08
Предположительно, вам не нужно будет компилировать все эти 76 МБ, и они все равно будут скомпилированы во что-то гораздо меньшее?
 – 
Rup
8 Янв 2011 в 18:25
Думаю, мне следовало указать, что я ищу PHP-решение, так что на самом деле компилировать нечего.
 – 
Adrien Hingert
8 Янв 2011 в 18:28
@AdrienHingert, вы нашли что-нибудь для извлечения ежедневных расходов из Google AdWords через API, я столкнулся с той же проблемой, нет подходящего решения, напишите, если найдете какое-либо решение
 – 
Always Sunny
24 Янв 2015 в 16:28

4 ответа

Если вы имеете в виду стоимость API, есть вызов GetUnits, используемый в API AdWords. Учебник.

Если вы имеете в виду текущие расходы на кампанию, вы можете использовать Выбор статистики. Вам понадобится стоимость/микросумма.

2
Saketh 15 Фев 2011 в 23:29

Использовать

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!');
                }
            }
        }
    }
}
1
Андрей Шилов 29 Май 2019 в 06:38

Вы не должны использовать APILity, так как поддерживаемая им версия API устарела несколько лет назад. Проект был остановлен в пользу новой официальной библиотеки PHP AdWords API. Некоторые его функции все еще работают (например, служба отчетов AdWords), но это не продлится слишком долго.

Я бы порекомендовал использовать официальную библиотеку, если это возможно, потому что она значительно упрощает разработку и обновление, но если вам действительно нужно меньше места, вы можете попробовать создать вызовы API самостоятельно, используя стандартное расширение PHP Soap.

0
Ewan Heming 23 Фев 2011 в 14:39
Спасибо Юэн, дело в том, что официальный API выглядит излишним для того, что мне нужно делать. Знаете ли вы какие-либо учебные пособия о том, как сократить его до минимума?
 – 
Adrien Hingert
24 Фев 2011 в 14:29
Вам когда-нибудь удавалось найти учебник по этому вопросу? Я написал некоторый код, чтобы сделать это некоторое время назад, но это было сложнее, чем ожидалось, и я не могу найти его сейчас: P
 – 
Ewan Heming
9 Мар 2011 в 09:03