読者です 読者をやめる 読者になる 読者になる

株式会社クイックのWebサービス開発blog

HAPPYなエンジニア&デザイナーのブログです

Google Adwords APIで広告レポートの取得を自動化する

明けましておめでとうございます。

2016年初日は、お祭り用のはっぴを来て出社した五所です。

今年初の投稿をさせて頂きます。

概要


最終的な目的は、WEB広告の運用の自動化。

手始めに、Google Adwords APIでレポートの取得を自動化する。

まだ日本語の情報が少ないので、APIの公式ドキュメントとExampleを見ながら進めた。

現状では様々なフォーマットの広告レポートを、アカウント毎に手作業でダウンロードしている。

そのため一括でダウンロードし、すぐに分析を始められる状態にしておきたい。

※本投稿は、下記でComposerを使って書き直しました。良かったらどうぞ。

aimstogeek.hatenablog.com

完成像


下記フィールドを持つキャンペーンレポートをダウンロードする。

Date,CampaignName, Impressions,Clicks,Cost,ConvertedClicks,AveragePosition

フィールド名 説明
Date 日付
CampaignName キャンペーン
Impressions 表示回数
Clicks クリック数
Cost 費用
ConvertedClicks コンバージョンに至ったクリック
AveragePosition 平均掲載順位

※ここでのフィールド名は、AdwordsAPIでのフィールド名と対応している。他のフィールド名等はこちらを参照

https://developers.google.com/adwords/api/docs/appendix/reports/campaign-performance-report?hl=ja#cost

やり方


AdwordsAPIの申請

APIを使うにはGoogleに申請して審査を通過する必要がある。 具体的に書くことはできないが、下記を踏まえて詳細に記述すると審査を通過しやすい。

  • APIを 使って何を自動化したいのか
  • 自動化によりどのくらいの時間が削減されるのか(例:年間1000時間)
  • どのようなレポートを作成しているのか。レポートの期間、フィールドなどを全て記述
  • 作成したレポートで何をしているのか。もしエクセルで分析しているなら、そのエクセルファイルを機密情報を消した上で提出すると良い

APIを利用する

実行した環境は以下の通り。

ここではPHPを使っているが、RubyPythonでも同様。

Ruby,Pythonが一番楽にできそうです。gem install --remote google-adwords-api , pip install googleadsで良いので、バージョンアップ等楽ですし、保存ファイル数が少なくて済みます。職場で使える場合はそっちを推奨します。特にPythonならそのままデータ分析にもっていけますしね。

ディベロッパーコンソールに登録

下記URLから、ディベロッパー登録する。

Google API Console

下記が得られるので、控えておく。

  • ディベロッパートークン
  • ユーザーエージェント ← 何でもいいっぽい
  • クライアントID
  • クライアントシークレット

参考 キーワードプランナーもログインせずに自由自在! AdWords API の申請と使い方

ここから先はターミナルを開いての作業になる。

開発環境を作る

# プロジェクトの作成
user@localhost:~$ mkdir ad-report
user@localhost:~$ cd ad-report/

# ライブラリのダウンロード
user@localhost:~/ad-report$ git clone https://github.com/googleads/googleads-php-lib.git
Cloning into 'googleads-php-lib'...
remote: Counting objects: 9861, done.
Checking connectivity... done.

OAuth2の設定

次にAPIを使うための設定をする。

下記設定ファイルを開き、Googleからもらったディベロッパーアカウント情報を入力する。

vim googleads-php-lib/src/Google/Api/Ads/AdWords/auth.ini

developerToken = "ディベロッパートークン"
userAgent = "ユーザーエージェント"

; MCCアカウント配下に複数のアカウントがある場合、動的に変更するため下記はそのままにしておく。
;clientCustomerId = "INSERT_CLIENT_CUSTOMER_ID_HERE"

client_id = "クライアントID"
client_secret = "クライアントシークレット"

; If you already have a refresh token, enter it below. Otherwise run
; GetRefreshToken.php.
refresh_token = "トークン 後で記入する"

OAuth2認証を行い、RefreshTokenを取得する。

user@localhost:~/ad-report$ php googleads-php-lib/examples/AdWords/v201509/Auth/GetRefreshToken.php

コンソールで入力を求められるので、指示に従う。

RefreshTokenが得られるので、再度auth.iniを編集して該当箇所を埋めておく。

プログラム作成

いよいよプログラムの作成に入る。

vim downloadCampaignPerformanceReport.php

<?php

require_once dirname(__FILE__) . '/googleads-php-lib/examples/AdWords/v201509/init.php';

$user = new AdWordsUser();
$user->SetClientCustomerId('カスタマーID');

// Build AWQL.
$fields      = 'Date,CampaignName,Impressions,Clicks,Cost,ConvertedClicks,AveragePosition';
$report_type = 'CAMPAIGN_PREFORMANCE_REPORT';
$first_date  = '20160301';
$last_date   = '20160331';

$report_query = sprintf(
    "SELECT %s  FROM %s WHERE CampaignStatus IN [ 'ENABLED','PAUSED' ]  DURING  %d,%d",
    $fields , $report_type , $first_date , $last_date
);

// Set additional options.
$options = array(
    'version' => ADWORDS_VERSION,
    'skipReportHeader'  => true,
    'skipColumnHeader'  => true,
    'skipReportSummary' => true,
    'includeZeroImpressions' => false,
);

// Download report.
ReportUtils::DownloadReportWithAwql( $report_query ,  'report.csv', $user, 'CSV', $options );

※2016/03/30 追記

  • v201509は2016年7月に使えなくなるので、バージョン上げたほうが良いです。
  • Cost等、金額が入る部分は百万倍されます。これは金額をMicrosで扱うGoogleの仕様のようで、returnMoneyInMicros等のオプションを指定しても、通常の金額で出力してくれませんでした。仕方なくsed s/000000//gコマンドを挟んで対処しています。

ちなみに、上記スクリプト$report_query

SELECT Date,CampaignName, Impressions, Clicks,Cost,ConvertedClicks,AveragePosition
FROM CAMPAIGN_PERFORMANCE_REPORT 
WHERE CampaignStatus IN [ 'ENABLED','PAUSED' ]
DURING 20160101,20160104

のようになっている。

これはAWQL言語という、Google Adwordsからデータを抽出するためのSQLによく似た言語。

大文字と小文字を厳密に区別するので、Mysqlに慣れている方は注意が必要。

詳細は https://developers.google.com/adwords/api/docs/guides/awql?hl=ja

AWQL言語を使えば、様々なレポートが簡単にダウンロードできそう。

ターミナルから下記を実行すれば、カレントディレクトリにreport.csvが作成されるはず。

user@localhost:~/ad-report$ php downloadCampaignPerformanceReport.php

まとめ

まだまだ分からないことも多いですが、ドキュメントがかなり丁寧に書いてあり、Exampleも豊富なのでなんとかやっていけそうです。

機能は豊富にあり、例えばキャンペーンの作成なども全てスクリプトから行えます。

取得したデータをElasticsearchに突っ込んで、Kibanaで分析とかしてみたい。

広告が完全自動化される日も来るのではないか・・・と考えると興奮しますね。

一緒に自動化する仲間を募集中です! http://www.green-japan.com/job/27758