ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

毎日自動でGoogle AdsenceのレポートのグラフをLINEに送るボットを作るぞ!

Googleアドセンスで収益が上がると毎日レポートを見るのが楽しみになりますよね。一日に何度も見てしまうかもしれません。

今回はそのレポートをLINEのボットで自動で送るようにさせよう!という手順を紹介する記事になります。

f:id:ponkotsu0605:20200404225620p:plain

はじめに

レポートをLINEに送るようにするために、いくつかのちょっとだけ面倒な手順があるので軽く紹介したいと思います。

LINEのボット

LINEのボットを作るためには、まずはLINEのMessaging APIを使う必要があるので、LINEのデベロッパー用のアカウントを作成する必要があります。それについては以下の記事でまとめてはみたので参考にしてみてください。

www.pnkts.net

Google Apps Script

今回はサーバ代わりに無料でスクリプトを定期実行ができるGoogle Apps Script(以下、GAS)を用いたいと思います。

GASってなんだろうって方には、以下のような記事を以前書いたことがあるのでちらっとだけ見ていただけると嬉しいです。

www.pnkts.net

レポートの数値だけを送るLINEのボット

Google Adsenceのレポートを送るLINEのボットは以前も紹介したことがあります。

www.pnkts.net

今回紹介するのはこの記事に近いようなものにはなりますが、グラフを画像化して投稿してくれるようになります。

グラフ化について

LINEのボットでグラフを投稿するというものは、以下の記事で紹介しております。

www.pnkts.net

今回の記事でやること

上の文章だけで勘付いている方もいるかもしれませんが、上で紹介した記事でやっていることを組み合わせることで、Google AdsenceのレポートをLINEのボットでグラフ化して定期的に自動で通知するものを作成します。

各手順の説明は上で紹介した記事を読んでいただければ実現できるので、今回の記事ではスクリプトを軽く説明する程度で終わらせたいなと思います。

ボットを作ろう

ということで、今回の記事のメインです。 Googleドライブを開き、スプレッドシートを作成します。

また、その時のGoogleドライブのフォルダのIDをメモしておきましょう。GoogleドライブのIDというのは、Googleドライブのフォルダを開いたときのhttps://drive.google.com/drive/folders/[フォルダのID]のところがIDになります。

スプレッドシートからGASを開く方法については、以下の記事で紹介しております。

www.pnkts.net

スクリプト

GASのエディタに以下のソースコードを入力します。

function main() {
  var folderId = 'XXXXXXXXXXXXXXXXXXXXXXXX'  // Googleドライブの一時フォルダのID
  var to = 'XXXXXXXXXXXXXXXXXXXXXXX';  // LINEの送る先
  
  var data = getGraphData();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, 8,5).setValues(data)
  var range = sheet.getDataRange();
  var chart = sheet.newChart()
  .addRange(range)
  .setChartType(Charts.ChartType.LINE)
  .setOption('title', 'PVと見積もり収益(先週比較)')
  .build();
  
  var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'YYYY-MM-dd');
  
  var graphImg = chart.getBlob(); // グラフを画像に変換
  var folder = DriveApp.getFolderById(folderId);
  var file = folder.createFile(graphImg)
  file.setName(today);
  
  // 公開設定する
  file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT)
  
  pushImage(to, file.getDownloadUrl(),file.getDownloadUrl())
  
  DriveApp.getFolderById(folderId).removeFile(file)
}

function getAdsenseData() {
  var now = new Date();
  var startDate = Utilities.formatDate(new Date(now.getYear(), now.getMonth(),now.getDate() -14), 'Asia/Tokyo', 'yyyy-MM-dd');
  var endDate = Utilities.formatDate(new Date(now.getYear(), now.getMonth(),now.getDate() -1), 'Asia/Tokyo', 'yyyy-MM-dd');
  var report = AdSense.Reports.generate(startDate, endDate, {
    metric: ['PAGE_VIEWS', 'EARNINGS'],
    dimension: ['DATE'],
    sort: ['+DATE']
  }).rows;
  
  return report;
}

function getGraphData() {
  var data = [['日付','PV','収益','先週のPV','先週の収益']];
  
  var report = getAdsenseData();
  for (var i = 0; i < 7; i++) {
    data.push([
      report[i + 7][0],
      report[i + 7][1],
      report[i + 7][2],
      report[i][1],
      report[i][2]
    ])
  }
  
  return data;
}



// line developersに書いてあるChannel Access Token
var access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

/**
* 指定のuser_idにpushをする
*/
function pushImage(to, src, srcPreview) {
  var url = "https://api.line.me/v2/bot/message/push";
  var headers = {
    "Content-Type" : "application/json; charset=UTF-8",
    'Authorization': 'Bearer ' + access_token,
  };
  
  var postData = {
    "to" : to,
    "messages" : [
      {
        'type':'image',
        'originalContentUrl':src,
        'previewImageUrl':srcPreview,
      }
    ]
  };
  
  var options = {
    "method" : "post",
    "headers" : headers,
    "payload" : JSON.stringify(postData)
  };
  
  return UrlFetchApp.fetch(url, options);
}

上記のXXXXにそれぞれ、GoogleドライブのIDやLINEの投稿先の部屋、LINEボットで投稿するためのトークンを貼り付けます。 (それぞれについては、面倒かもしれませんが、上で紹介している記事を御覧ください。) main関数を実行するようにすればテスト投稿ができます。

定期実行の設定をする

このプログラムを定期実行に登録します。定期実行の設定については以下の記事にまとめてあります。

www.pnkts.net

今回の設定では、mainという関数を毎朝定期実行するように設定しています。 f:id:ponkotsu0605:20200404231702p:plain

実行結果

上記の準備ができると、以下のような投稿がされるようになります。 f:id:ponkotsu0605:20200404225620p:plain

先週分との比較ができるグラフを作成しています。 グラフにはPV数見積もり収益額が表示されていて、また、先週のグラフも表示することで、前の一週間と比較することができるようになっています。

さいごに

今回はGoogle AdsenceのレポートをLINEにグラフ化して送ることを実現しました。 他にこういうものがほしい項目やレポートをLINEで送ってほしいなどがありましたらコメントなどを残していただけると実現しやすいなと思います。

お問い合わせプライバシーポリシー制作物