概要 🔗
Google Apps Script で Adsense の売上を取得する場合、Service から Adsense を追加すると簡単に実装できますが、10 月に API のバージョンが v1.4 から v2 へ移行されることに伴いバージョンアップ対応が必要です。
しかしながら Service で追加できる Adsense のバージョンは現状まだ v1.4 のみで v2 への移行を行うことができません。
今回は Service を使わずに一旦 v2 へ移行することを目的とし、そのうち Service が出てくると信じて自分で認証から実装します。
手順 🔗
- まずはgithubの案内どおりに進みます。Google Apps Script の Library で
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
を追加します。バージョンは可能な限り、そのタイミングでの最新バージョンを指定しましょう。
- GCP Console で Adsense Management API を有効化
OAuth 2.0 Client ID
を作成
- OAuth 同意画面を作成
OAuth 2.0 Client ID
の origin 設定と callback url 設定を行う
callback URL は https://script.google.com/macros/d/{SCRIPT ID}/usercallback
の形式となります。
setClientId
と setClientSecret
に GCP Console で発行した OAuth 2.0 Client ID の設定を入れてコードを書く(長いのでコメントは削除しました。解説含めて見たい時はgithubを参考にしましょう)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
function getAdsenseService() {
return OAuth2.createService("adsense")
.setAuthorizationBaseUrl("https://accounts.google.com/o/oauth2/auth")
.setTokenUrl("https://accounts.google.com/o/oauth2/token")
.setClientId("...")
.setClientSecret("...")
.setCallbackFunction("authCallback")
.setPropertyStore(PropertiesService.getUserProperties())
.setScope("https://www.googleapis.com/auth/adsense")
.setParam("login_hint", Session.getEffectiveUser().getEmail())
.setParam("access_type", "offline")
.setParam("prompt", "consent");
}
function authCallback(request) {
var adsenseService = getAdsenseService();
var isAuthorized = adsenseService.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput("Success! You can close this tab.");
} else {
return HtmlService.createHtmlOutput("Denied. You can close this tab");
}
}
function adsenseV2Execution() {
var adsenseService = getAdsenseService();
if (!adsenseService.hasAccess()) {
var authorizationUrl = adsenseService.getAuthorizationUrl();
var template = HtmlService.createTemplate(
'<a href="<?= authorizationUrl ?>" target="_blank">Authorize</a>. ' +
"Reopen the sidebar when the authorization is complete."
);
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
SpreadsheetApp.getUi().showSidebar(page);
} else {
makeRequest(); //ここにAdsenseのレポート作成用関数を入れる
}
}
|
- v2 のレポートを取得する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
function makeRequest() {
let adsenseService = getAdsenseService();
let requestUrl, params, report;
let lismoRevenue = (totalRevenue = 0);
const reportGenerateEndpoint =
"https://adsense.googleapis.com/v2/accounts/●●アカウント●●/reports:generate";
// code
params = {
metrics: ["TOTAL_EARNINGS"],
dateRange: "YESTERDAY",
reportingTimeZone: "ACCOUNT_TIME_ZONE",
};
requestUrl = reportGenerateEndpoint + "?" + generateQueryString(params);
report = UrlFetchApp.fetch(requestUrl, {
headers: {
Authorization: "Bearer " + adsenseService.getAccessToken(),
},
});
let reportList = JSON.parse(report);
// 適当に返却された値を加工するための処理を書きましょう
}
// GETパラメータ生成用関数
function generateQueryString(data) {
const params = [];
for (var d in data)
params.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
return params.join("&");
}
|
参考 🔗