Webinar-Q&Aでいただいた質問へのサンプルスクリプト

2024年1月24日(水)に開催いたしました「Yahoo!広告 スクリプト入門オンラインセミナー~レポート活用編~」の質疑応答で出てきたご質問への回答としてのサンプルスクリプトを掲載しております。

Q.広告費、インプレッション、クリック数のいずれかの数値が1以上になっているキャンペーンのみ書き出すスクリプトはどのように設定すればよろしいでしょうか?
A.テクニカルな部分もあるため、以下のサンプルをご提供いたします。
※以下のサンプルは検索広告ですが、スプレッドシートへの書き込み部分を★以下に書き換えていただくことで、ディスプレイ広告でもお使いいただけます。


function main() {
  const spreadsheetId = 'SPREAD_SHEET_ID';//...(1)
  const sheetName = 'シート1';//...(2)
  const ss = SpreadsheetApp.openById(spreadsheetId);
  let sh = ss.getSheetByName(sheetName);
  sh.clear();
  const reportData = AdsUtilities.getSearchReport({
    accountId: AdsUtilities.getCurrentAccountId(),// 実行中のアカウントを取得します
    reportType: 'CAMPAIGN', //...(3)
    fields: [
      'ACCOUNT_NAME','CAMPAIGN_NAME','IMPS','CLICKS','COST','CONVERSIONS'//...(4)
    ],
    reportDateRangeType: 'THIS_MONTH',//...(5)
  }).reports[0].rows;
  //★ディスプレイ広告の場合は、基本のレポートのサンプルの最終行を消して以下を埋め込み
  let executeData = [];
  for(let i = 0; i < reportData.length; i++ ){
    // fieldsに設定されている場所を先頭から順番に数値として設定します。Javascriptでは配列は0からカウントしますので、
    // ACCOUNT_NAMEは0、CAMPAIGN_NAMEは1、IMPSは2と数えていきます。
    const imps = reportData[i][2]; // IMPS
    const clicks = reportData[i][3]; // CLICKS
    const cost = reportData[i][4]; // COST
    // インプレッション、クリック数、コストを1以上 JavascriptではORは||でつなぎます。(ANDの場合&&)
    // 条件にあったレポートのレコードを出力用の配列に追加
    if( imps >= 1 || clicks >= 1 || cost >= 1 ) {
      executeData.push(reportData[i]);
    }
  }
  // 絞り込んだ結果データがあれば出力
  if( executeData.length > 0 ) {
    sh.getRange('A1').setValues(executeData);//スプレッドシートへの書き込み処理
    Logger.log('出力に成功しました');
  } else {
    Logger.log('対象のレポートデータがありませんでした');
  }
}

Q.日付の期間を特定日から当日までで設定したいのですが設定することはできますか?
A.テクニカルな部分もあるため、以下のサンプルをご提供いたします。
※以下のサンプルは検索広告ですが、★部分が本日の日付を取得・埋め込む部分ですので、ディスプレイ広告でも同じようにお使いいただけます。


function main() {
  const spreadsheetId = 'SPREAD_SHEET_ID';//...(1)
  const sheetName = 'シート1';//...(2)
  const ss = SpreadsheetApp.openById(spreadsheetId);
  let sh = ss.getSheetByName(sheetName);
  sh.clear();
  // ★Javascript から今日の日付を取得する
  const today = Utilities.formatDate(new Date(), 'GMT', 'yyyyMMdd');
  const reportData = AdsUtilities.getSearchReport({
    accountId: AdsUtilities.getCurrentAccountId(),// 実行中のアカウントを取得します
    reportType: 'CAMPAIGN', //...(3)
    fields: [
      'DAY','CAMPAIGN_NAME','IMPS','CLICKS','COST','CONVERSIONS'//...(4)
    ],
    reportDateRangeType:'CUSTOM_DATE',
    dateRange: {
        startDate: '20230101',//特定日を設定
        endDate: today // ★当日を設定
    },
  }).reports[0].rows;
  // 結果データがあれば出力
  if( reportData.length > 0 ) {
    sh.getRange('A1').setValues(reportData);//スプレッドシートへの書き込み処理
    Logger.log('出力に成功しました');
  } else {
    Logger.log('対象のレポートデータがありませんでした');
  }
}