かずきち。の日記

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

何の記事ではてなスターを獲得したかを自動記録したい!記事別はてなスター獲得推移を記録するGASを書きました!

昨年の10月にはてなブログのスター数をカウントするスクリプトを書いてみました!

kazukichi0914.hatenablog.com
引用:
https://kazukichi0914.hatenablog.com/entry/2020/10/10/100251

その当時は毎日なんスターが付いているかトレースできたので満足でした。
毎日はてなスターの獲得を確認したいなと思っていました。
せっかくなら記事別にスターの獲得数を知りたいです。

完成体は、

f:id:kazukichi_0914:20210704163518g:plain

こんな具合にはてなスターの推移が見られます。
でも一つの疑問が浮かびました。

このはてなスターはどこの記事に付与されているんだろう?

なので、もうちょっとプログラムを改修してはてなスターのついている記事を特定します。

材料ははてなから定期的に送られてくるメール

f:id:kazukichi_0914:20210704164054g:plain

こんなメールが毎日日次ではてなから送られてきます。
このメールを解析してカレンダーに書きましょう!という算段です。

このメール本文を見れば、

先日公開されたYOASOBI「夜に駆ける」のEnglishバージョンがかっこいい!に
少納言 (id:syounagon) ☆
めるママっくす (id:merumamax) ☆☆☆
ひーろ (id:hirochanna) ☆☆☆
ダイス (id:daiskun) ☆☆☆
もう少しでシングル (id:lowhandicapper) ☆☆☆
金井戸 隆 (id:kaneido) ☆☆☆☆☆
りょうさん (id:ryousankunchan) ☆☆☆
AIBOパパ (id:daiki-em) ☆☆☆
お母ちゃん (id:suoaei) ☆☆☆☆☆☆

レモネード専門店「レモニカ」が爆誕!夏も冬もいろんな味のレモネードを楽しめる!
https://kazukichi0914.hatenablog.com/entry/2021/07/03/200000
rieco (id:sora-umi-inu-watashi) ☆☆☆☆☆☆
もう少しでシングル (id:lowhandicapper) ☆☆
金井戸 隆 (id:kaneido) ☆☆☆☆☆
お母ちゃん (id:suoaei) ☆☆☆
AIBOパパ (id:daiki-em) ☆☆☆
sato (id:pirorikin-58) ☆☆☆

という詳細がわかります。
このデータを使います。

function HatenaBlog() { 
  //最新の☆レポートを取得します
  const query = 'You have new messages.';
  const start = 0;
  const max = 1;
 
  const threads = GmailApp.search(query, start, max);
  const messagesForThreads = GmailApp.getMessagesForThreads(threads);
  
  for(const messages of messagesForThreads){
    //)を微調整
    hatenastar = messages[0].getPlainBody().split("☆")[3] + ")";
    //console.log(hatenastar);
    
    var count = messages[0].getPlainBody().split("■").length;
    console.log("スターが付いた記事数は"+(count-2)+"記事");   

    for(var i=1;i<=count-2;i++){
      //ブログ一記事あたりのスター
      //console.log("記事URL");
      //console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0]);
      //☆で切る
      console.log("記事タイトル");
      console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("~ ☆(はてなスター)とは? ~")[0]);
    }
  }
}

これが改修後のスクリプトです。
短いですが、完動します。
もはや、力技でメール本文をパースしていますが、split関数を使いまくります。

コード本体
function HatenaBlog() { 
  //最新の☆レポートを取得します
  const query = 'You have new messages.';
  const start = 0;
  const max = 1;
 
  const threads = GmailApp.search(query, start, max);
  const messagesForThreads = GmailApp.getMessagesForThreads(threads);
  
  for(const messages of messagesForThreads){
    //)を微調整
    hatenastar = messages[0].getPlainBody().split("☆")[3] + ")";
    //console.log(hatenastar);
    
    var count = messages[0].getPlainBody().split("■").length;
    console.log("スターが付いた記事数は"+(count-2)+"記事");   

    for(var i=1;i<=count-2;i++){
      //ブログ一記事あたりのスター
      //console.log("記事URL");
      //console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0]);
      //☆で切る
      console.log("記事タイトル");
      console.log(messages[0].getPlainBody().split("■")[i].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("¥n")[0].split("~ ☆(はてなスター)とは? ~")[0]);
    }
  }
}

こちらの27行のコードで、

ブログの詳細データをGoogleカレンダーにこんなアウトプットを死ぬまでしてくれます。
こんなことが27行のコードでできてしまうんですねーGoogleさんさすがです。
split関数を使いまくって文字列を整形しています。

実行結果はこちら

f:id:kazukichi_0914:20210704165112g:plain

誰がなんの記事にブックマークや☆をくれたのか記録をしていきます。
ブログ運営をする上でなんの記事がPVを増やしてくれているのか解析することは大事です。
なので、さくっとはてなスターの習得の詳細をカレンダーに書き込むスクリプトを書いてみました。

ついたはてなスター・はてブの数を毎日自動記録します はてなブログの頑張りを記録して、モチベーションに

プログラミングなんてできないよーという方も上記サービスで設置までサポートいたします。
一度本サービスを購入いただければGoogleが稼働している限り動作いたしますので、リーズナブルかと思います。
買い切りです。