今回は Google 広告の集計についても Google Spreadsheet に入れたいと思います。
以前は Google AdWords といわれていました。特に検索結果画面で広告を出す機能です。
集計を行う場合、管理ツール上部のレポート機能を使っています。好きな書式でレポートを出し、ダウンロードボタンで出力します。
結果を書き込むシートを用意します。
通常の Google 広告アカウントだと API が使えません。MCC アカウントを使用します。 最初はテストアカウントになっていますが、通常アカウントにするために申請が必要です。 通常アカウントになると、開発者トークンが取得できます。
管理画面右上にある数字です。000-000-0000 の形式で、API で使うときにハイフンを除きます。
データ取得には API のエンドポイントにアクセスしますが、Google Cloud Console で利用設定が必要です。
上記のとおりですが、HTTP でエンドポイントにアクセスします。API を使うときはキーが必要なので、OAuth と開発用キーをヘッダに追加します。 データ取得には GAQL というクエリ構文を使用します。ここで気を遣うところとしては FROM で何を引っ張ってくるか、どのフィールドに有効な値が入っているかです。量がかなり膨大で、今回は landing_page_view で日付セグメントしたうえで、表示、クリック、コストを引っ張ってきました。デバッグに出しながら出力を確認しますが、文字型になっている場合があり、結果を集計するときに文字列連結されてしまったりします。1を掛け算するなりして数値型にします。また、コストについてはとても大きな値になるので、1000 * 1000 で割ります。項目中に ctr などの確率項目がありますが、集計した後でも充分出せる(clicks / impression)ので省きます。
function GET_ADWORDS(_customer, _developer) {
// Google Ads API
const url = 'https://googleads.googleapis.com/v11/customers/{customer_id}/googleAds:searchStream'.replace('{customer_id}', _customer);
const prms = {
muteHttpExceptions: true,
method: 'POST',
headers: {
accept: 'application/json',
// OAuth のアクセストークンを指定
authorization: 'Bearer {access_token}'.replace('{access_token}', ScriptApp.getOAuthToken()),
'content-type': 'application/json',
// 開発者キーを指定
'developer-token': _developer,
},
payload: JSON.stringify({
query: [
// GAQL を記述
'SELECT',
[
'segments.date',
'metrics.impressions',
'metrics.clicks',
'metrics.cost_micros',
].join(','),
'FROM landing_page_view',
'WHERE segments.date DURING LAST_7_DAYS',
'ORDER BY segments.date',
].join(' ')
})
};
//console.log(UrlFetchApp.getRequest(url, prms));
const res = UrlFetchApp.fetch(url, prms);
const sts = res.getResponseCode();
console.log(['STATUS', sts]);
console.log(res.getAllHeaders());
const cnt = res.getContentText();
if (sts !== 200) {
console.error(cnt);
} else {
console.log(cnt);
}
var obj;
try {
obj = JSON.parse(cnt);
} catch (_error) {
console.error(_error);
}
return obj[0].results.map(function (_row) {
// 結果が文字列で返ってくるので数値変換
return [_row.segments.date, _row.metrics.clicks * 1, _row.metrics.impressions * 1, _row.metrics.costMicros / 1000000];
});
}