Yahoo!広告 スクリプト | Developer Center
English事例集(レポート系)
・Q.コンバージョン名を入れてレポート抽出するにはどうしたらいいでしょうか?・Q.ディスプレイ広告のデータをスクリプトを用いてスプレッドシートに自動で取得したいのですが、期間を全期間で取得するにはどうすればいいでしょうか?
・Q.広告レポート出力において、キャンペーンIDを指定してレポートを出力をする事は可能でしょうか?(フィードバックフォームからのご要望)
・Q.日付の期間を特定日から当日までで設定したいのですが設定することはできますか?(ウェビナーQ&Aでのご質問)
・Q.広告費、インプレッション、クリック数のいずれかの数値が1以上になっているキャンペーンのみ書き出すスクリプトはどのように設定すればよいでしょうか?(ウェビナーQ&Aでのご質問)
・Q.ディスプレイ広告のレポート出力においてオーディエンスカテゴリを含めたレポートを出力する事は可能でしょうか?(フィードバックフォームからのご要望)
Q.コンバージョン名を入れてレポート抽出するにはどうしたらいいでしょうか?
A.以下のように記載することでコンバージョンレポートが抽出できます。
動作確認バージョン:v202406
検索広告コードサンプル ここをクリックすると折り畳みます。
//検索広告用
function main() {
const reportData = createConversionReport();
setSpredsheet(reportData);
}
//レポート作成
function createConversionReport() {
const reportData = AdsUtilities.getSearchReport({
accountId: AdsUtilities.getCurrentAccountId(),// 実行中のアカウントを取得します
reportType: 'CAMPAIGN',
fields: [
'ACCOUNT_NAME', 'CAMPAIGN_NAME', 'CONVERSION_NAME', 'CONVERSIONS', 'CONV_VALUE'//コンバージョン名を入れてコンバージョンレポートに
],
reportDateRangeType: 'THIS_MONTH',//期間「今月」
}).reports[0].rows;
return reportData;
}
//スプレッドシートへの書き込み
function setSpredsheet(reportData) {
if (reportData.length == 0) {
Logger.log('対象データがありませんでした。');
return;
}
const ss = SpreadsheetApp.openById('スプレッドシートID');
let sh = ss.getSheetByName('シート1');
sh.clear();
sh.getRange('A1').setValues(reportData);
}
ディスプレイ広告コードサンプル ここをクリックすると折り畳みます。
//ディスプレイ広告用
function main() {
const reportData = createConversionReport();
setSpredsheet(reportData);
}
//レポート作成
function createConversionReport() {
const reportData = AdsUtilities.getDisplayReport({
accountId: AdsUtilities.getCurrentAccountId(),// 実行中のアカウントを取得します
fields: [
'ACCOUNT_NAME', 'CAMPAIGN_NAME', 'CONVERSION_NAME', 'CONVERSIONS', 'CONV_VALUE'//コンバージョン名を入れてコンバージョンレポートに
],//...(3)
reportDateRangeType: 'THIS_MONTH',//期間「今月」
}).reports[0].rows;
return reportData;
}
//スプレッドシートへの書き込み
function setSpredsheet(reportData) {
if (reportData.length == 0) {
Logger.log('対象データがありませんでした。');
return;
}
const ss = SpreadsheetApp.openById('スプレッドシートID');
let sh = ss.getSheetByName('シート1');
sh.clear();
sh.getRange('A1').setValues(reportData);
}
Q.ディスプレイ広告のデータをスクリプトを用いてスプレッドシートに自動で取得したいのですが、期間を全期間で取得するにはどうすればいいでしょうか?
A.ディスプレイ広告(運用型)においては全期間の提供がないため、日付を直接指定するCUSTOM_DATEの機能を使用します。サンプルコードでは、endDateには今日の日付を自動的に設定し、startDateには任意の日付(例えば、アカウント開設日など)を設定します。
動作確認バージョン:v202406
コードサンプル ここをクリックすると折り畳みます。
function main(){
const reportData = createAccountReport();
setSpredsheet(reportData);
}
function createAccountReport(){
const accountId = AdsUtilities.getCurrentAccountId();
const startDate = '20240401'; // 取得開始したい日付を設定する
const toDay = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd"); // 本日の日付取得
const reportData = AdsUtilities.getDisplayReport({
accountId: accountId,
fields: [
'ACCOUNT_ID', 'ACCOUNT_NAME', 'IMPS', 'CLICKS', 'COST'
],
dateRange: {
startDate: startDate,
endDate: toDay,
},
reportDateRangeType: 'CUSTOM_DATE',
}).reports[0].rows;
return reportData;
}
function setSpredsheet(reportData){
if(reportData.length == 0){
Logger.log('対象データがありませんでした。');
return;
}
const ss = SpreadsheetApp.openById('スプレッドシートID');
let sh = ss.getSheetByName('シート1');
sh.clear();
sh.getRange('A1').setValues(reportData);
}
Q広告レポート出力において、キャンペーンIDを指定してレポートを出力をする事は可能でしょうか?
A.はい、以下のスクリプトで実現できます。
期間や項目を変えたい場合は、ソリューションの基本のレポートをご覧ください。
キャンペーンIDの指定を変更したい場合は定数部分を編集してください。
動作確認バージョン:v202406
ディスプレイ広告コードサンプル ここをクリックすると折り畳みます。
function main() {
const SPREAD_SHEET_ID = 'SPREAD_SHEET_ID';
const SHEET_NAME = 'SHEET_NAME';
const CAMPAIGN_IDS = ['1111111', '2222222'];//絞り込むキャンペーンIDを半角カンマ区切りで指定します
const accountId = AdsUtilities.getCurrentAccountId();
const ss = validateAndGetSpreadsheet(SPREAD_SHEET_ID);
const sh = validateAndGetSheet(ss,SHEET_NAME);
const reports = AdsUtilities.getDisplayReport({
accountId: accountId,
fields: [
'CAMPAIGN_ID', 'CAMPAIGN_NAME', 'ADGROUP_ID', 'ADGROUP_NAME', 'AD_ID', 'AD_NAME', 'IMPS', 'CLICKS', 'COST'
],
filters: [
{
field: 'CAMPAIGN_ID',
filterOperator: 'IN',
values: CAMPAIGN_IDS
}
],
reportDateRangeType: 'THIS_MONTH',
});
sh.clear();
if(reports.reports[0].rows.length > 0){
const report = reports.reports[0].rows;
sh.getRange('A1').setValues(report);
}
}
function validateAndGetSpreadsheet(SPREAD_SHEET_ID) {
if (SPREAD_SHEET_ID === 'SPREAD_SHEET_ID' || SPREAD_SHEET_ID === '') {
throw new Error('スプレッドシートIDを設定してください。');
}
try{
return SpreadsheetApp.openById(SPREAD_SHEET_ID);
} catch(e){
throw new Error('スプレッドシートを開くことが出来ませんでした。スプレッドシートIDまたはスプレッドシートの権限が正しいか確認してください。' + e);
}
}
function validateAndGetSheet(ss, SHEET_NAME) {
if (SHEET_NAME === '') {
throw new Error('シート名を設定してください。');
}
const sh = ss.getSheetByName(SHEET_NAME);
if(sh === null){
throw new Error('シートが開けませんでした。シート名を確認してください。');
}
return sh;
}
検索広告コードサンプル ここをクリックすると折り畳みます。
function main() {
const SPREAD_SHEET_ID = 'スプレッドシートID';
const SHEET_NAME = 'シート1';
const CAMPAIGN_IDS = ['1111111', '2222222'];//絞り込むキャンペーンIDを半角カンマ区切りで指定します
const accountId = AdsUtilities.getCurrentAccountId();// 実行中のアカウントを取得します
const ss = validateAndGetSpreadsheet(SPREAD_SHEET_ID);
const sh = validateAndGetSheet(ss, SHEET_NAME);
sh.clear();
const reportData = AdsUtilities.getSearchReport({
accountId: accountId,
reportType: 'AD',
fields: [
'CAMPAIGN_ID', 'CAMPAIGN_NAME', 'ADGROUP_ID', 'ADGROUP_NAME', 'AD_ID', 'AD_NAME', 'IMPS', 'CLICKS', 'COST'
],
reportDateRangeType: 'THIS_MONTH',
reportSkipColumnHeader: 'FALSE',
filters: [
{
field: 'CAMPAIGN_ID',
filterOperator: 'IN',
values: CAMPAIGN_IDS
}
]
}).reports[0].rows; //戻り値の1つ目のレポート行を取得
sh.getRange('A1').setValues(reportData);//スプレッドシートへの書き込み処理
}
function validateAndGetSpreadsheet(SPREAD_SHEET_ID) {
if (SPREAD_SHEET_ID === 'SPREAD_SHEET_ID' || SPREAD_SHEET_ID === '') {
throw new Error('スプレッドシートIDを設定してください。');
}
try {
return SpreadsheetApp.openById(SPREAD_SHEET_ID);
} catch (e) {
throw new Error('スプレッドシートを開くことが出来ませんでした。スプレッドシートIDまたはスプレッドシートの権限が正しいか確認してください。' + e);
}
}
function validateAndGetSheet(ss, SHEET_NAME) {
if (SHEET_NAME === '') {
throw new Error('シート名を設定してください。');
}
const sh = ss.getSheetByName(SHEET_NAME);
if (sh === null) {
throw new Error('シートが開けませんでした。シート名を確認してください。');
}
return sh;
}
Q.日付の期間を特定日から当日までで設定したいのですが設定することはできますか?
A.はい、できます。以下のスクリプトの★部分を参考にしてください。
動作可能プロダクト:検索広告
動作確認バージョン:v202306
コードサンプル ここをクリックすると折り畳みます。
function main() {
const spreadsheetId = 'SPREAD_SHEET_ID';
const sheetName = 'シート1';
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',
fields: [
'DAY','CAMPAIGN_NAME','IMPS','CLICKS','COST','CONVERSIONS'
],
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('対象のレポートデータがありませんでした');
}
}
Q.広告費、インプレッション、クリック数のいずれかの数値が1以上になっているキャンペーンのみ書き出すスクリプトはどのように設定すればよいでしょうか?
A.OR条件はレポート取得時に指定できない(フィルタはAND条件)ため、以下のスクリプトのようにレポート取得後に判定する形となります。
動作可能プロダクト:ディスプレイ広告
動作確認バージョン:v202306
コードサンプル ここをクリックすると折り畳みます。
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.以下のお知らせのとおり、オーディエンスカテゴリレポートは2024年4月に終了となっております。
【ディスプレイ広告】オーディエンスカテゴリーレポートの提供を終了
こちらには「オーディエンスリストターゲティング」のレポート出力例を掲載いたします。
出力項目を追加したい場合は、以下のページをご参照のうえ、追加してください。
・レポート定義
動作確認バージョン:v202402
コードサンプル ここをクリックすると折り畳みます。
function main() {
const spreadsheetId = 'スプレッドシートID';
const sheetName = 'シート1';
const ss = SpreadsheetApp.openById(spreadsheetId);
let sh = ss.getSheetByName(sheetName);
sh.clear();
const reportData = AdsUtilities.getDisplayReport({
accountId: AdsUtilities.getCurrentAccountId(),
fields: [
'AUDIENCE_LIST_NAME', 'AUDIENCE_LIST_TYPE', 'ACCOUNT_NAME', 'CAMPAIGN_NAME',
'IMPS', 'CLICKS', 'COST', 'CONVERSIONS'
],
reportDateRangeType: 'THIS_MONTH',
reportSkipColumnHeader: 'FALSE'
}).reports[0].rows;
sh.getRange('A1').setValues(reportData);
}