かずきち。の日記

サーバサイドエンジニアのつぶやき

【死ぬまで完全フルオート】GoogleAppsScriptでAdSenseの収益の自動記録してみた

GoogleAdSenseの収益を時系列に記録しよう

Googleアドセンスの収益はその日のページビューやクリックスルーレートなどの複数の要素によって変動します。
なので、今日は〇〇円儲かったといってもアクセスの品質を見なければ実は意味がないんです。
薄利多売のページや高付加価値のページというものが存在します。
なので、Googleアドセンスでは自分のページでの広告クリック単価を数時間おきにレポートをしてくれます。

Dateオブジェクトを文字列に変換するユーティリティメソッド

Utilities.formatDate(date, timeZone, format)
入力
    date: 文字列に変換したいDateオブジェクト
    timeZone: タイムゾーン (JST, UTC など)
    format: JavaのSimpleDateFormatに準じたフォーマット指定文字列
出力
    Dateオブジェクトを文字列にしたもの

フォーマット指定文字
 指定文字	 時刻要素
 y	 年
 M	 月
 d	 日
 E	 曜日
 H	 時 (0-23) 24時制
 h	 時 (1-12) 12時制
 a	 AM/PM
 m	 分
 s	 秒
 S	 ms
 z	 タイムゾーン (+nnnn)

AdSenseで要求されている形式に直して、今回はさくっとアドセンスの収益を記録するスクリプトを書いてみました。
コードを書き始めるとGoogleのどのサービスと連携しますか?とサービスを追加できます。
この中にGmailGoogleカレンダーGoogleマップといった大体のサービスは揃っています。

f:id:kazukichi_0914:20210309104550p:plain

なので、今回で言えば、「AdSenseサービス」の利用をオンにします。

function myFunction() {   
  //昨日の日の収益を移動
  // 現在アクティブなシートを取得
  var sheet = SpreadsheetApp.openById("自身のスプレッドシートID");
  
  //先日のAdSenseデータの移動
  sheet.getRange("A2:GV998").moveTo(sheet.getRange("A3"));

  // 今日の日付を格納
  var date = new Date();
  Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd'));
  var today = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd')-2;
  sheet.getRange("A2").setValue(today);

  //一週間前を取得
  var date = new Date(); //現在日時のDateオブジェクトを作る
  var today = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd');
  
  //現在の「日」を取得
  var day = date.getDate();
  Logger.log(day); //5
  
  //前日日付にしたいので-1する
  date.setDate(day-7);
  Logger.log(date); //Wed Sep 04 19:33:33 GMT+09:00 2019
  
  //日付の表示形式を整形する
  var lastweek = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd');
  Logger.log(lastweek); //2019/09/04

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = sheet.getSheets()[0];
  var adClientId = 'ca-pub-******************'
  var startDate = lastweek;
  var endDate = today;
  var metrics = ['PAGE_VIEWS', 'CLICKS', 'PAGE_VIEWS_CTR', 'COST_PER_CLICK', 'PAGE_VIEWS_RPM', 'EARNINGS']
  var args = {
 'metric': metrics,
 'dimension': ['WEEK'],
 'filter': ['AD_CLIENT_ID==' + adClientId],
 };
 var report = AdSense.Reports.generate(startDate, endDate, args).getRows();
 Logger.log(report[1]);

 sheet.getRange("A2").setValue(new Date());
 sheet.getRange("B2").setValue(report[1][1]);
 sheet.getRange("C2").setValue(report[1][2]);
 sheet.getRange("D2").setValue(report[1][3]);
 sheet.getRange("E2").setValue(report[1][4]);
 sheet.getRange("F2").setValue(report[1][5]);
 sheet.getRange("G2").setValue(report[1][6]);
}

このスクリプトを実行すると
f:id:kazukichi_0914:20210309102858p:plain

その日の収益を記録してくれます。
しかも自動で。
あとは寝て待ちましょうという算段です。

詰みポイント

Dateオブジェクトで月を表す「M」と分を表す「m」があります
Monthとminiteを区別するためにアルファベットの大文字小文字が違います。

Dateオブジェクトで時間を表す「H」と24時制を表す「h」12時制があります。
大文字・小文字で18:00と表したり、6:00と表したりすることができます。

ここの大文字小文字で挙動が変わるので、注意が必要です。

スクリプトの書き方がわからない・かっこいいダッシュボードを作りたい方は下記でもサポートしています

AdSense収益を決まった時間に自動で記録します GASで収益の記録を自動化して、スプレッドシートに記帳