かずきち。の日記

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

GoogleAdSenseのCTR/CPC/収益などを記録するスクリプトをさくっと書いてみました

インターネット収益を自動で集計したい

毎日、広告収益が上がってきます。
その数値をいちいちサイトにアクセスしていては大変です。
自動で収益を記録しましょう。

本サイトでのグラフはAdSense規約に乗っ取り、ページビューや収益の具体的数値は除いて掲載しています。
値の公表はポリシー違反になりますので、ご了承ください。

さっそくですが完成体

f:id:kazukichi_0914:20210706213340g:plain

最終目標はこのようなグラフを自動生成して、サイト別の収益率の計測に使います。
その日のクリック単価や収益を計測することができます。
これを追っていれば、ブログの収益率をトレースができます。
詳細な値などは今回は非掲載です。

下準備はAdSenseManagementAPIをオンにする

f:id:kazukichi_0914:20210706215056g:plain

GASのAPIのうち、プログラムからAdSenseを利用するライブラリをオンにしてください。
ここは詳しくは解説したいのでリンクを貼っておきます。

note.com
引用:
https://note.com/mangapostjapan/n/n96223145a99d


コード解説
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-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 adClientId = 'ca-pub-自身のID';
  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)
 }
}

このコードで完動します。
約60行ほどのコードですが、収益の記録を行ってくれるコードになります。
コードの設置もサポートいたしますので、その際はご相談ください。
有償でサポートいたします。

オンラインのデータを自動更新で可視化します 毎日の定形業務から開放されませんか?