今回はYahoo!広告スクリプトを用いて天気に連動した広告配信を行う方法を紹介します。
Yahoo!広告スクリプトでは天気情報を取得できるため、天気や気温に応じて広告の出し分けや日予算や入札の調整が可能です。
事前にスプレッドシートに出し分けたい広告の情報を基に、Yahoo!広告スクリプトで天気情報を取得した天気情報と組み合わせて入稿を行っていきます。
目次
サンプルコード
function main() {
// アカウントIDを取得
const accountId = AdsUtilities.getCurrentAccountId();
// 今日の港区の天気を取得
const minatoKuWeather = WeatherApp.getWeatherByName(
'東京都 港区', // prefecture name or city name
'TODAY' // TODAY or TOMORROW or TODAY_AND_TOMORROW
);
// 港区の最高気温を取得
const day = minatoKuWeather[0].day[0];
const maxTemp = day.temp.max;
Logger.log(maxTemp);
// スプレッドシートを指定
var spreadsheet = SpreadsheetApp.openByUrl('スプレッドシートのURL');
// シート名を指定
var sheet = spreadsheet.getSheetByName('シート名');
// 最終行を取得
var lastRow = sheet.getLastRow();
// 最終行が1行目の場合は終了
if (lastRow == 1) {
Logger.log('ad does not exist.');
return;
}
// 範囲を取得
var range = sheet.getRange(2, 1, lastRow-1, 4).getValues();
Logger.log(range);
// 空配列を作成
let adArray = [];
// スプレッドシートの情報を配列に追加
for (let i = 0; i < lastRow-1; i++) {
// スプレッドシートに記載されている広告カテゴリを取得
var adCategory = range[i][0];
// 今回は31度以上を高気温と定義
if (maxTemp >= 31) {
var judge = "高気温";
} else {
var judge = '通常気温';
};
// 気温の判定と広告カテゴリが一致する場合はオン切替
if (judge === adCategory) {
var status = 'ACTIVE';
} else{
var status = 'PAUSED';
};
Logger.log(status);
// 入稿情報を格納
let setAd = {
accountId: accountId,
campaignId: range[i][1],
adGroupId: range[i][2],
adId: range[i][3],
userStatus : status
};
adArray.push(setAd);
}
// 配列の情報に基づきステータス変更
const adsSet = Search.AdGroupAdService.set({
accountId: accountId,
operand: adArray,
}).rval;
// 入稿された情報を出力
for (let i = 0; i < adsSet.values.length; i++) {
if (adsSet.values[i].operationSucceeded) {
let adGroup = adsSet.values[i].adGroupAd;
Logger.log('status-> ' + adGroup.userStatus);
} else {
Logger.log('エラー発生');
}
}
}
サンプルコードの説明
アカウントIDを取得する
// アカウントIDを取得
const accountId = AdsUtilities.getCurrentAccountId();
入稿を行うアカウントのアカウントIDを取得します。
アカウントIDを取得する
// 今日の港区の天気を取得
const minatoKuWeather = WeatherApp.getWeatherByName(
'東京都 港区', // prefecture name or city name
'TODAY' // TODAY or TOMORROW or TODAY_AND_TOMORROW
);
// 港区の最高気温を取得
const day = minatoKuWeather[0].day[0];
const maxTemp = day.temp.max;
Logger.log(maxTemp);
今日の東京都港区の天気情報を取得します。
東京都港区は他の地名に変更可能です。また、今日以外にも明日、明後日の天気を取得できます。
スプレッドシートの情報を取得する
// スプレッドシートを指定
var spreadsheet = SpreadsheetApp.openByUrl('スプレッドシートのURL');
// シート名を指定
var sheet = spreadsheet.getSheetByName('シート名');
// 最終行を取得
var lastRow = sheet.getLastRow();
// 最終行が1行目の場合は終了
if (lastRow == 1) {
Logger.log('ad does not exist.');
return;
}
// 範囲を取得
var range = sheet.getRange(2, 1, lastRow-1, 4).getValues();
Logger.log(range);
スプレッドシートには事前に以下の4項目を記載しておきます。
- 広告カテゴリ
- キャンペーンID
- 広告グループID
- 広告ID
入稿情報を生成
// 空配列を作成
let adArray = [];
// スプレッドシートの情報を配列に追加
for (let i = 0; i < lastRow-1; i++) {
// スプレッドシートに記載されている広告カテゴリを取得
var adCategory = range[i][0];
// 今回は31度以上を高気温と定義
if (maxTemp >= 31) {
var judge = "高気温";
} else {
var judge = '通常気温';
};
// 気温の判定と広告カテゴリが一致する場合はオン切替
if (judge === adCategory) {
var status = 'ACTIVE';
} else{
var status = 'PAUSED';
};
Logger.log(status);
今回は、今日の東京都港区の天気が31度以上の場合を高気温と定義し、高気温用の広告がオンになるように設定します。この条件式さえ変更すれば、高気温・通常気温以外も含めて広告のステータスを変更することもできます。
生成した入稿情報を基に入稿
// 入稿情報を格納
let setAd = {
accountId: accountId,
campaignId: range[i][1],
adGroupId: range[i][2],
adId: range[i][3],
userStatus : status
};
adArray.push(setAd);
}
// 配列の情報に基づきステータス変更
const adsSet = Search.AdGroupAdService.set({
accountId: accountId,
operand: adArray,
}).rval;
広告のステータスを変更するには、アカウントID、キャンペーンID、広告グループID、広告ID、ステータスの5つが必要です。入稿情報を空配列に格納して、入稿を行います。
入稿内容を出力
// 入稿された情報を出力
for (let i = 0; i < adsSet.values.length; i++) {
if (adsSet.values[i].operationSucceeded) {
let adGroup = adsSet.values[i].adGroupAd;
Logger.log('status-> ' + adGroup.userStatus);
} else {
Logger.log('エラー発生');
}
}
}
入稿内容が正しいか確認できるようにするために、入稿内容を出力します。今回はステータスを出力しています。
Yahoo!広告スクリプトの参考ページ
今回はYahoo!広告スクリプトの「広告」のサンプルコードをベースに開発しました。
広告
Yahoo! JAPANが提供するYahoo!広告 スクリプトのDeveloper Centerです。
また、参照したAPIリファレンスは「AdGroupAdService」です。変更時にどの項目が必須か確認できます。ただ、各項目を確認するのは手間なので、サンプルスクリプトをベースに開発したほうが楽だと思います。