クイックノート

ちょっとした発見・アイデアから知識の発掘を

はてなスターの推移をグラフ化

はてなブログで読者様からのリアクションとして、
はてなスターをもらえることがあります。

ブログ全体としていくらはてなスターをもらったかは、
ブログの管理ページから確認できるのですが、
いつどのくらいもらったかは分かりません。

f:id:u874072e:20191031135643p:plain:h300
総スター数の確認

実は、はてなブログに登録したアドレスに
レポートを送信する設定をしていれば、 下のようなメールが届きます。

f:id:u874072e:20191031140003p:plain
☆レポートメール

このレポートメールの情報を集計すれば、
はてなスターの推移がわかるということで、
今回はGoogle App Script(GAS)を使って下のようなグラフを作ってみます。

f:id:u874072e:20191031140233p:plain
獲得はてなスターの推移

準備

レポート設定のページから、
Gmailに☆レポートを通知するように設定しておきます。

GAS によるレポート集計

GASでレポートメールを集計し、
スプレッドシートに集計結果を保存します。

スクリプト

下は、スプレッドシートdataシートに、
メールの日付とレポートされたスターの数を書き込むスクリプトです。

GmailApp.searchで最大200件のメールを読み込んでいますが、
ここは自由に調整してください。

SHEETNAME = "data"
function myFunction() {
  var ans = [["date","★","☆"]]
  
  var threads = GmailApp.search("Hatena::S",0,200)
  for(var i =0;i<threads.length;i++){
    var th = threads[i]
    var message = th.getMessages()[0]
    
    var date = message.getDate()
    var body = message.getBody()
    
    var res = body.match("ただいまの☆総数 : .+★([0-9]+) ☆([0-9]+)")
    if(res != null){
      var color = res[1]
      var normal = res[2]
    }else{
      var res = body.match("ただいまの☆総数 : ([0-9]+)")
      if(res == null) continue
      var color = 0
      var normal = res[1]
    }

    
    ans.push([date,color,normal])
  }
  
  var ss = SpreadsheetApp.getActive()
  var s = ss.getSheetByName(SHEETNAME)
  
  s.clear()
  s.getRange(1, 1,ans.length,3).setValues(ans)
}

グラフの描画

上記のスクリプトを実行すると、
スプレッドシートに下のような集計データが保存されます。

f:id:u874072e:20191031141057p:plain
はてなスター集計データ

あとは「挿入」タブからグラフを挿入して、
グラフのレイアウトを好みに応じて整えれば完成です。

自動更新

グラフを自動的に更新したい場合は、
スクリプトを定期実行して、
グラフを埋め込むようにすればOKです。
詳しくは下記の記事を参照してください。

clean-copy-of-onenote.hatenablog.com

下のグラフは自動更新されるグラフを埋め込んだものです。

まとめ

あまり気に留めてなかった機械的なレポートメールですが、
消さずに残しておくと、
意外と面白いグラフが作れるというのが今回のポイントですね。

他にも眠っているメールで面白いことができないか考えてみたくなります。

プライバシーポリシー