MENU

Yahoo!広告スクリプトでスプレッドシートの情報に基づいて日予算を変更する方法

  • URLをコピーしました!

今回はYahoo!広告スクリプトを用いてスプレッドシートの情報に基づいて日予算を変更する方法を紹介します。
スプレッドシートと連携することで、管理画面やエディターを操作することなくスクリプトのみでキャンペーンに変更を加えることが可能になります。

目次

サンプルコード

function main() {
  // アカウントIDを取得
  const accountId = AdsUtilities.getCurrentAccountId();

  // スプレッドシートを指定
  var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/スプレッドシートのURL/');
  // シート名を指定
  var sheet = spreadsheet.getSheetByName('シート名');
  // 最終行を取得
  var lastRow = sheet.getLastRow();
  // 最終行が1行目の場合は終了
  if (lastRow == 1) {
    Logger.log('campaign does not exist.');
    return;
  }
  // 範囲を取得
  var range = sheet.getRange(2, 1, lastRow-1, 2).getValues();
  Logger.log(range);

  // 空配列を作成
  let campaignArray = [];
  // スプレッドシートの日予算情報を配列に追加
  for (let i = 0; i < lastRow-1; i++) {
    //New object to set
    let setCampaign = {
      accountId: accountId,
      campaignId: range[i][0],
      budget: {
        amount: range[i][1]
      },
    };
    campaignArray.push(setCampaign);
  }

  // 配列の情報に基づき日予算を更新
  const campaignsSet = Search.CampaignService.set({
    accountId: accountId,
    operand: campaignArray,
  }).rval;

  // 入稿された情報を出力
  for (let i = 0; i < campaignsSet.values.length; i++) {
    if (campaignsSet.values[i].operationSucceeded) {
      let campaign = campaignsSet.values[i].campaign;
      Logger.log('campaignId-> ' + campaign.campaignId
        + ', campaignName-> ' + campaign.campaignName + ' has been updated.');
    } else {
      let errorList = campaignsSet.values[i].errors;
      errorList.forEach(function (element) {
        if (element.code == 'I0001' && element.details[0].requestKey.includes('campaignId')) {
          Logger.log('campaignId-> ' + element.details[0].requestValue + ' does not exsit.');
        } else if (element.code == '210307' && element.details[0].requestKey.includes('budget/amount')) {
          Logger.log('campaignId-> ' + campaignArray[i].campaignId + ' budget-> ' + element.details[0].requestValue +': Budget must be lower than ad group/keywords.');
        } else {
          Logger.log('campaignId-> ' + campaignArray[i].campaignId + ' could not be updated.');
        }
      });
    }
  }
}

サンプルコードの説明

アカウントIDを取得する

  // アカウントIDを取得
  const accountId = AdsUtilities.getCurrentAccountId();

入稿を行うアカウントのアカウントIDを取得します。

スプレッドシートを指定する

  // スプレッドシートを指定
  var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/スプレッドシートのURL/');
  // シート名を指定
  var sheet = spreadsheet.getSheetByName('シート名');
  // 最終行を取得
  var lastRow = sheet.getLastRow();
  // 最終行が1行目の場合は終了
  if (lastRow == 1) {
    Logger.log('campaign does not exist.');
    return;
  }
  // 範囲を取得
  var range = sheet.getRange(2, 1, lastRow-1, 2).getValues();
  Logger.log(range);

事前にスプレッドシートにキャンペーンID・更新したい日予算を記入しておきます。今回は300円に変更します。

更新前のキャンペーンの日予算は100円、200円です。

日予算を入稿

  // 空配列を作成
  let campaignArray = [];
  // スプレッドシートの日予算情報を配列に追加
  for (let i = 0; i < lastRow-1; i++) {
    //New object to set
    let setCampaign = {
      accountId: accountId,
      campaignId: range[i][0],
      budget: {
        amount: range[i][1]
      },
    };
    campaignArray.push(setCampaign);
  }

  // 配列の情報に基づき日予算を更新
  const campaignsSet = Search.CampaignService.set({
    accountId: accountId,
    operand: campaignArray,
  }).rval;

キャンペーン・日予算の情報は空配列に蓄積します。その後、campaignsSetで配列を丸ごと入稿します。
rangeの情報を取得⇒入稿を繰り返すことも可能ですが、都度入稿が発生するためキャンペーン数が多い場合に時間がかかってしまいます。それを回避するために、一度から配列に情報を蓄積し一気に入稿を行っています。

入稿情報を出力

  // 入稿された情報を出力
  for (let i = 0; i < campaignsSet.values.length; i++) {
    if (campaignsSet.values[i].operationSucceeded) {
      let campaign = campaignsSet.values[i].campaign;
      Logger.log('campaignId-> ' + campaign.campaignId
        + ', campaignName-> ' + campaign.campaignName + ' has been paused.');
    } else {
      let errorList = campaignsSet.values[i].errors;
      errorList.forEach(function (element) {
        if (element.code == 'I0001' && element.details[0].requestKey.includes('campaignId')) {
          Logger.log('campaignId-> ' + element.details[0].requestValue + ' does not exsit.');
        } else if (element.code == '210307' && element.details[0].requestKey.includes('budget/amount')) {
          Logger.log('campaignId-> ' + campaignArray[i].campaignId + ' budget-> ' + element.details[0].requestValue +': Budget must be lower than ad group/keywords.');
        } else {
          Logger.log('campaignId-> ' + campaignArray[i].campaignId + ' could not be stopped.');
        }
      });
    }
  }

入稿結果を出力し、成功した場合は成功用の情報、失敗した場合はエラーの種類に応じた内容が出力されます。

管理画面にも正しく反映されています。

Yahoo!広告スクリプトの参考ページ

今回はYahoo!広告スクリプトのサンプルコードをベースに開発しました。サンプルコードではキャンペーンID・日予算を直書きしていましたが、本記事ではスプレッドシートの情報に基づいて実行しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次