AdWords scriptでレポートデータをGoogleスプレッドシートに流し込む

gasaws

*本コラムはブログQuantum Leapの記事を転載したものです。

オリジナルURL:
【AdWords script】1. レポートをGoogleスプレッドシートに流し込む

 

さて、AdWords scriptのサンプルコードなどについても書いていきましょう。

AdWords scriptは今まで取り上げてきたGoogle Apps ScriptがAdWords管理画面にIDE(統合開発環境)がエンベッドされているものです。AdWordsアカウントの入札、入稿、レポーティングにおけるさまざまな自動処理が可能になる、非常に便利な機構です。

日々の運用管理をする上でデータのモニタリングは当然大事ですが、いちいちCSVでレポートデータを管理画面から落としてExcelで処理しなくても、Googleスプレッドシートに自動的にデータを落とし、必要な処理を関数化したりGoogle Apps Scriptで処理を定義することが可能です。

同じGoogleのプラットフォームですので、AdWordsとGoogleスプレッドシートと連携させるのはとても楽です。特にAdWordsに対する認証やアカウントの選択をコードにする必要がなく簡単です。

前述のように、レポートデータを落としてからの処理がキモではありますが、まずはどのようにAdWords scriptを設定しデータをGoogleスプレッドシートに流し込むかのキホンとコツを解説します。

 

AdWords scriptの設定

実際のAdWords scriptを見ながら解説します。このままご自分のAdWordsアカウントのAdWords scriptにコピペ利用できますので、ぜひトライしてみてください。

最初の2行(var emailとvar spreadsheet_urlには任意の情報を入れてお使いください。
Googleスプレッドシートのサンプルはこちらをコピー利用いただけます。
https://goo.gl/z1VQaW

【サンプルコード】

// グローバル変数
var email = '(メール通知を受信するメールアドレスをここにペースト。''の間に。)';
var spreadsheet_url = '(レポートを流し込みたいGoogleスプレッドシートのURLをペースト。''の間に。)';
var formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd' 'HH:mm:ss");
var cid = AdWordsApp.currentAccount().getCustomerId();
var accountname = AdWordsApp.currentAccount().getName();

function main() {
  var spreadsheet = copySpreadsheet(spreadsheet_url);
  var rawsheet = spreadsheet.getSheetByName('rawdata');
  var formatsheet = spreadsheet.getSheetByName('AW-cp');
  formatsheet.getRange(1, 7, 1, 1).setValue(formattedDate);
  formatsheet.getRange(1, 2, 1, 1).setValue('CID:');
  formatsheet.getRange(1, 3, 1, 1).setValue(cid);
  formatsheet.getRange(2, 2, 1, 1).setValue('アカウント名:');
  formatsheet.getRange(2, 3, 1, 1).setValue(accountname);

  // レポート取得  
  var report = AdWordsApp.report(
    'SELECT CampaignName,  Impressions, Clicks, Ctr, Cost, ConversionsManyPerClick, CostPerConversionManyPerClick, ConversionRateManyPerClick, AveragePosition ' +
    'FROM   CAMPAIGN_PERFORMANCE_REPORT ' +
    'WHERE  Impressions > 0 ' +
    'DURING THIS_MONTH');
  
  // 上記AWQLで指定したデータをエキスポート
  report.exportToSheet(rawsheet);

    // コスト列でソート
  rawsheet.sort(5, false);

  // ヘッダー設定
  var header = [
      'キャンペーン名',
      'インプレッション数',
      'クリック数',
      'クリック率',
      'コスト',
      'コンバージョン数',
      'コンバージョン単価',
      'コンバージョン率',
      '平均掲載順位',
  ];
  var headerrange = formatsheet.getRange(4, 2, 1, 9);
  headerrange.setValues([header]);
  headerrange.setHorizontalAlignment("center");
  headerrange.setFontWeight("bold");
  headerrange.setFontSize(8);

  // rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
  var lastRow = rawsheet.getLastRow();
  var lastColumn = rawsheet.getLastColumn();
  var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
  formatsheet.getRange(5, 2, lastRow, lastColumn).setValues(copyValue);
  // 処理後、rawdataシートを削除する
  spreadsheet.deleteSheet(rawsheet);
  
  // ログ記録とメール通知設定
  Logger.log('キャンペーンレポート(今月)の準備ができました\n' +
      spreadsheet.getUrl());
  if (email) {
    MailApp.sendEmail(email,
      'キャンペーンレポート(今月)の準備ができました' + ' ' +accountname + ' ' + formattedDate,
      spreadsheet.getUrl());
  }
}

// スプレッドシートのコピー利用
function copySpreadsheet(spreadsheetUrl) {
  return SpreadsheetApp.openByUrl(spreadsheetUrl).copy(
      'キャンペーンレポート(今月)' + ' ' + accountname + " " + formattedDate);
}

これだけです。簡単ですね。AdWords scriptに名前を付けて保存してください。実行すると、「Campaign Performance Report + ‘取得日時’」という名前のスプレッドシートができているはずです。

ブロック毎にコメントアウト(//の部分)していますので、参考にしてください。
最初の部分は、ファイル名(レポート名+日付)をつけたスプレッドシートを生成するための変数指定になっています。最後のexportToSheetメソッドで、実際のスプレッドシート生成とデータのエキスポートを同時に処理するようになっています。これは実はいろいろやり方はあるかと思ってまして、

  • 新しいスプレッドシートを生成
  • 既成のテンプレートをコピー利用する
  • 既成のスプレッドシートの値を毎回消して利用する

今回の場合は1.にしていますが、みなさんの好みで処理方法は選んでください。

 

AWQL(AdWords Query Language)と便利なツール

真ん中のAdWordsApp.reportオブジェクトでAdWordsレポートの種類、出力するフィールド、出力条件を指定します。

この部分はAWQL(AdWords Query Language)というAdWordsデータに対してクエリーをかけるためのSQLライクな言語です。

  • SELECTで出力したいフィールドを指定しています。CampaignId、Impressions、 Clicks、Ctr、Costを指定しました。投稿の都合上、キャンペーンIDにしていますが、キャンペーン名(CampaignName)にするとわかりやすいでしょう(日本語でも問題ありません)。
  • FROMで出力したいレポートを指定しいています。今回はキャンペーンレポート(CAMPAIGN_PERFORMANCE_REPORT)を指定しています。
  • WHEREは条件指定です。Impressions > 0とすることでインプレッション1以上のキャンペーンのみを出力します。
  • DURINGは期間指定です。LAST_30_DAYSで過去30日間を指定しています。20150101,20150131のように、日付で期間指定することも可能です。
  • その他、ソート順や取得件数なども指定できますが、詳細はこちらをご覧ください(https://developers.google.com/adwords/api/docs/guides/awql)

 

AdWordsにはいろいろな種類のレポートがありますし、取得できるデータの種類も多数あります。これらを呼び出すためのクエリー文を書くための便利な外部ツールがありますのでご紹介します。その名もAWQL.me(https://www.awql.me/)。

 

ss1

 

ログインします。認証を完了すればコンソールでAdWordsアカウントをプルダウンで選択できるようになります。

 

ss3

 

コンソールでfromの行にマウスを合わせると右のHelpの内容が変わりますね。ここでレポートの種類を確認できますので、別のものを選択したい場合はHelpのレポート名をコピペして、コンソールのfromの部分を置き換えてください。

レポート種類を変えると、そのレポートで取得できるフィールドが出てくることも確認できるかと思います。同じように必要なフィールドをコピペしてください。

Runを押すと、下に結果が戻ってきます。ここで実際にAWQLコードが間違っていないか確認できます。

 

ss4

 

コードが確認できたら、AdWords scriptで活用ください(AWQL.meの指定を参考にしつつ、コードの書き方は実際のAdWords scriptのそれに準じてください)。

著者
Tags ,

Related posts

*

Top