質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1255閲覧

JSで区間のあるデータを取出したい

uwanosora

総合スコア6

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/12/08 08:23

ヤフー広告のデータをスプレッドシートへ反映させたいと思っています。
一日単位で取得することはできたのですが、過去30日分をまとめて取得する方法が分からず困っています。

普段コードを書くことがほとんどなく、書いてあることはわかるのですが変更したりすることができません。
大変申し訳無いのですが30日分のデータを取得できるコードを教えて頂けないでしょうか。

function main() { // シート定義 const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('db'); // 各種設定 const clientId = ""; // クライアントID const clientSecret = ""; // クライアントシークレット const refreshToken = ""; // リフレッシュトークン const accountId = ""; // 広告アカウントID // アクセストークン取得 const loginResponse = yahooAdLogin(clientId, clientSecret, refreshToken); const accessToken = loginResponse.access_token; // YAHOO広告レポートを作成し、JobのIDを取得 const reportName = "test"; const createReportResponse = yahooAdCreateReport(accessToken, accountId, reportName); const reportJobIds = createReportResponse.rval.values.map(item => Number(item.reportDefinition.reportJobId)); // レポート作成完了まで10秒間待つ Utilities.sleep(10000); reportJobIds.forEach(reportJobId => { // レポートの取得 ** const downloadResponse = yahooAdDownloadReport(accessToken, accountId, reportJobId); downloadResponse.forEach(report => { let d = new Date() d.setDate(d.getDate() - 1);** let target_row = ss.getRange(ss.getMaxRows(), 2).getNextDataCell(SpreadsheetApp.Direction.UP).getRow() + 1; ss.getRange(target_row, 1).setValue(report.campaignName) ss.getRange(target_row, 2).setValue(d) ss.getRange(target_row, 3).setValue(report.clicks) ss.getRange(target_row, 4).setValue(report.conversions) ss.getRange(target_row, 5).setValue(report.cost) ss.getRange(target_row, 6).setValue(report.imps) ss.getRange(target_row, 7).setValue(report.clickRate) ss.getRange(target_row, 8).setValue(report.cpc) ss.getRange(target_row, 9).setValue(report.cvRate) ss.getRange(target_row, 10).setValue(report.cvValue) }); }); } // アクセストークン取得 function yahooAdLogin(clientId, clientSecret, refreshToken) { const url = "https://biz-oauth.yahoo.co.jp/oauth/v1/token"; const httpResponse = UrlFetchApp.fetch(url, { method: 'get', payload: { grant_type: "refresh_token", client_id: clientId, client_secret: clientSecret, refresh_token: refreshToken, }, }); const status = httpResponse.getResponseCode(); if (status !== 200) { throw 'HttpRequestError'; } const response = JSON.parse(httpResponse.getContentText()); return response; } // 広告レポートを作成するAPIのコール function yahooAdCreateReport(accessToken, accountId, reportName) { const url = "https://ads-search.yahooapis.jp/api/v5/ReportDefinitionService/add"; const httpResponse = UrlFetchApp.fetch(url, { method: 'post', // muteHttpExceptions : true, contentType: 'application/json', headers: { 'Authorization': `Bearer ${accessToken}`, }, payload: JSON.stringify({ accountId, operand: [ { fields: [ "CAMPAIGN_NAME", // キャンペーン名 "CAMPAIGN_START_DATE", // 日付 "CLICKS", // クリック数 "CONVERSIONS", // コンバージョン数 "COST", // 費用 "IMPS", // 表示回数 "CLICK_RATE", // クリック率 "AVG_CPC", // 平均クリック単価 "CONV_RATE", // コンバージョン率 "CONV_VALUE", // コンバージョン値 ], reportCompressType: "NONE", // レポートファイルは圧縮しない reportDateRangeType: "YESTERDAY", // 過去7日間(当日含まない)の期間指定 reportDownloadEncode: "UTF8", reportDownloadFormat: "CSV", reportIncludeDeleted: "TRUE", reportIncludeZeroImpressions: "FALSE", reportLanguage: "JA", reportName: reportName, reportType: "CAMPAIGN" // 広告グループごとに集計したレポートを出力する } ], }), }); const status = httpResponse.getResponseCode(); if (status !== 200) { throw 'HttpRequestError'; } const response = JSON.parse(httpResponse.getContentText()); return response; } // 広告レポートを取得し、結果をパースする関数 function yahooAdDownloadReport(accessToken, accountId, reportJobId) { const url = "https://ads-search.yahooapis.jp/api/v5/ReportDefinitionService/download"; const httpResponse = UrlFetchApp.fetch(url, { method: 'post', contentType: 'application/json', headers: { 'Authorization': `Bearer ${accessToken}`, }, payload: JSON.stringify({ accountId, reportJobId, }), }); const status = httpResponse.getResponseCode(); if (status !== 200) { throw 'HttpRequestError'; } const response = httpResponse.getContentText(); const lines = response.split('\n'); if (lines.length === 3) { return []; } return lines.slice(1, -2).map((line) => { const data = line.split(','); return { campaignName: String(data[0]), date: String(data[1]), clicks: Number(data[2]), conversions: Number(data[3]), cost: Number(data[4]), imps: Number(data[5]), clickRate: Number(data[6]), cpc: Number(data[7]), cvRate: Number(data[8]), cvValue: Number(data[9]), }; }); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問