明けましておめでとうございます。
2016年初日は、お祭り用のはっぴを来て出社した五所です。
今年初の投稿をさせて頂きます。
概要
最終的な目的は、WEB広告の運用の自動化。
手始めに、Google Adwords APIでレポートの取得を自動化する。
まだ日本語の情報が少ないので、APIの公式ドキュメントとExampleを見ながら進めた。
現状では様々なフォーマットの広告レポートを、アカウント毎に手作業でダウンロードしている。
そのため一括でダウンロードし、すぐに分析を始められる状態にしておきたい。
※本投稿は、下記でComposerを使って書き直しました。良かったらどうぞ。
完成像
下記フィールドを持つキャンペーンレポートをダウンロードする。
Date,CampaignName, Impressions,Clicks,Cost,ConvertedClicks,AveragePosition
フィールド名 | 説明 |
---|---|
Date | 日付 |
CampaignName | キャンペーン |
Impressions | 表示回数 |
Clicks | クリック数 |
Cost | 費用 |
ConvertedClicks | コンバージョンに至ったクリック |
AveragePosition | 平均掲載順位 |
※ここでのフィールド名は、AdwordsAPIでのフィールド名と対応している。他のフィールド名等はこちらを参照
やり方
AdwordsAPIの申請
APIを使うにはGoogleに申請して審査を通過する必要がある。 具体的に書くことはできないが、下記を踏まえて詳細に記述すると審査を通過しやすい。
- APIを 使って何を自動化したいのか
- 自動化によりどのくらいの時間が削減されるのか(例:年間1000時間)
- どのようなレポートを作成しているのか。レポートの期間、フィールドなどを全て記述
- 作成したレポートで何をしているのか。もしエクセルで分析しているなら、そのエクセルファイルを機密情報を消した上で提出すると良い
APIを利用する
実行した環境は以下の通り。
ここではPHPを使っているが、RubyやPythonでも同様。
※Ruby,Pythonが一番楽にできそうです。gem install --remote google-adwords-api
, pip install googleads
で良いので、バージョンアップ等楽ですし、保存ファイル数が少なくて済みます。職場で使える場合はそっちを推奨します。特にPythonならそのままデータ分析にもっていけますしね。
ディベロッパーコンソールに登録
下記URLから、ディベロッパー登録する。
下記が得られるので、控えておく。
- ディベロッパートークン
- ユーザーエージェント ← 何でもいいっぽい
- クライアント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