Google Apps Scriptで取得していたAdsense v1.4をv2へ暫定移行した

· ·

概要 🔗

Google Apps Script で Adsense の売上を取得する場合、Service から Adsense を追加すると簡単に実装できますが、10 月に API のバージョンが v1.4 から v2 へ移行されることに伴いバージョンアップ対応が必要です。

しかしながら Service で追加できる Adsense のバージョンは現状まだ v1.4 のみで v2 への移行を行うことができません。

今回は Service を使わずに一旦 v2 へ移行することを目的とし、そのうち Service が出てくると信じて自分で認証から実装します。

手順 🔗

  1. まずはgithubの案内どおりに進みます。Google Apps Script の Library で 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF を追加します。バージョンは可能な限り、そのタイミングでの最新バージョンを指定しましょう。

  1. GCP Console で Adsense Management API を有効化
  2. OAuth 2.0 Client ID を作成
  3. OAuth 同意画面を作成
  4. OAuth 2.0 Client ID の origin 設定と callback url 設定を行う

callback URL は https://script.google.com/macros/d/{SCRIPT ID}/usercallback の形式となります。

  1. setClientIdsetClientSecret に 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のレポート作成用関数を入れる
  }
}
  1. 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("&");
}

参考 🔗

comments powered by Disqus