かずきち。の日記

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

1時間でGASでAdSense収益を自動集計するスクリプトを書いてみる!

f:id:kazukichi_0914:20220211224224g:plain

思い立ったら、スクリプトはすぐ書いてしまいましょう!

アフィリエイト系の収益は会社の給料と異なり、毎日のクリック率に大きく左右されるものです。

今回はAdSenseの収益画面に表示されている推定収益額をプログラムから取得することを目標にします。

support.google.com
引用:
https://support.google.com/adsense/answer/10600008?hl=ja

AdSenseManagementAPIは2021年4月21日に変更が加えられています。

developers.google.com
引用:
https://developers.google.com/adsense/host/release_notes

こんかいのバージョンからアカウントの関連付、チャンネル管理、広告ユニット管理が使いやすくなっています。
では早速GoogleのAdSenseAPIと連携していきます。

script.google.com

まずはここでスクリプトを書いていきます。
注意するのは「リソース→Googleの拡張サービス→AdSenseサービスと進み、APIをオンにします

f:id:kazukichi_0914:20220211225307g:plain

これでGoogleサービスから外部サービスへの連携を許可します。
あとはもうスクリプトを書くだけです。
サクッと行きましょう。

function myFunction(){   
  //昨日の日の収益を移動
  // 現在アクティブなシートを取得
  var sheet = SpreadsheetApp.openById('スプレッドシートID');

  //先日のAdSenseデータの移動
  sheet.getRange("A2:J1000").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-1);
  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 adClientId = 'ca-pub-3647961026085475';
  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]);
  //Logger.log(report[1][1]);
  
  sheet.getRange("A2").setValue(report[1][0]);
  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]);
  

  //pv取得
  var pv =sheet.getRange("B2");
  var pv2 = pv.getValue();

  //クリック数取得
  var click =sheet.getRange("C2");
  var click2 = click.getValue();

  //CTR取得
  var ctr =sheet.getRange("D2");
  var ctr2 = ctr.getValue();+"\nCTR:"+ctr2

  //CPC取得
  var cpc =sheet.getRange("E2");
  var cpc2 = ctr.getValue();
  
  //RPM取得
  var rpm =sheet.getRange("F2");
  var rpm2 = ctr.getValue();

  //収益取得
  var earn =sheet.getRange("G2");
  var earn2 = ctr.getValue();

  //総収益
  var all =sheet.getRange("J1");
  var all2 = ctr.getValue();

  var messageText = "\n"+today+"\nPV数:"+pv2+"\nクリック数:"+click2+"\nCPC:"+cpc2+"\nRPM:"+rpm2+"\nEARN:"+earn2+"\n\n総収益"+all2;

  // LINEから取得したトークン
  let token = "QpjE3wuAyu0uuGHB5LLfoxBcb5nET9GlYhe4JrlVTWY"
  let options = {
   "method" : "post",
   "headers" : {
     "Authorization" : "Bearer "+ token
   },
   "payload" : {
     "message" : messageText
   }
 }

 const FValues = sheet.getRange('A:A').getValues();  //A列の値を全て取得
 var lastrow = FValues.filter(String).length;  //空白の要素を除いた長さを取得

 let url  = "https://notify-api.line.me/api/notify"
 if(sheet.getRange("C"+lastrow).getValue() !== ""){
 UrlFetchApp.fetch(url, options)
 }

  var date = new Date();
  //今日の日付を表示
  Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyyMMdd'));
  Logger.log(date);

  var calender = CalendarApp.getCalendarById("収益を書き込みたいカレンダーID@group.calendar.google.com");
  
        const option = {
      description: '収益詳細\n'+messageText+'\nhttps://docs.google.com/spreadsheets/d/e/収益を書き込みたいすpyレッドシートID/pubchart?oid=1388776535&format=interactive',
      }
  
    calender.createAllDayEvent(
    "収益:¥"+earn2
  , new Date(date)
  , option
   );

たかだか120行のコードになりますが、これで収益の自動集計を行うスクリプトが書けました。
ちょっとめんどくさかった点は収益発生時点の形式がyyyyMMdd形式になります。
適当にMMを小文字のmmにしてたら動かなくて…何ー?と思ったらMMは月、mmは分を表しているので気をつけてください。

あとは死ぬまで集計したいので、起動時間をセットします。
金曜日の夜くらいにしようと思います。

f:id:kazukichi_0914:20220211230019g:plain

午後11時〜午後0時にその日の確定収益を報告します。
あとは毎日寝ているだけで収益がカレンダーに報告される算段です。

f:id:kazukichi_0914:20220211230621g:plain

そうするとあとは自動でAdSense収益がカレンダー似【記載がされていきます。
毎日エクセルを使って売上管理などをしている人は自動化すると人間はなにもしなくて良くなりますのでおすすめです。