今回は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・日予算を直書きしていましたが、本記事ではスプレッドシートの情報に基づいて実行しています。
キャンペーン
Yahoo! JAPANが提供するYahoo!広告 スクリプトのDeveloper Centerです。