【Google Apps Script】Gunosyまとめに「はてブカウンター」をつける

f:id:misozui:20131104123018p:plain
一時期「はてブ」の拡張サービスにすぎないとか言われていたGunosyですが、個人的には最近は「はてブ」のホットエントリでチェックしていない記事がピックアップされるようになったと感じます。数字の裏付けはなくただの印象にすぎませんが。Gunosyまとめメールのクリック率は私の中では以前に比べて高くなりました。(それと比べるとはてなのマイホットエントリーは、前の晩に見たなー、という記事が多いです、当たり前なのでしょうけれども)。

ただ、Gunosyまとめのメールに「はてブウンター」がないのが不便に感じます。やはりいい記事だとブクマ数とかになりますし、あと他の人のコメントもみたいと思います。PCだとブラウザの拡張機能でチェックできるのですが、Androidだと無理です。

そこで、Google Apps Scriptを使って、Gmailで受信したGunosyまとめメールを、本文に「はてブウンター」を挿入して自分に送り返すようにしてみました。

スクリプト

正規表現で要素を取得して置き換えをしています(htmlメールのhtmlもDOMで操作できればもっと簡単にできるのだと思いますが)。

function forwardGunosyWithHatebu() {
  //受信トレイのスレッド取得
  var threads = GmailApp.getInboxThreads();
  for (var i = 0; i < threads.length; i++) {
    //スレッドのメッセージ取得(最初のメッセージだけ取得すればいいかも
    //しれないけど一応)
    var msgs = threads[i].getMessages();
    for (var j = 0; j < msgs.length; j++) {
      //差出人を判定してbodyを取得
      var msg = msgs[j];
      var from = msg.getFrom();
      if ((/noreply@gunosy.com/.test(from) && 
           msg.isUnread()) == false) continue;
      var body = msgs[j].getBody();
      //tr要素でループ
      var pattern_tr = /<tr>([\s\S]*?)<\/tr>/g;
      var tr;
      while (tr = pattern_tr.exec(body)){
        //記事元のurlを取得
        var pattern_url = /url=([\s\S]*?)&amp;p=/
        var urls = pattern_url.exec(tr[1]);
        if (urls == null) continue;
        //はてブカウンター
        var deurl = decodeURIComponent(urls[1]);
        var span = '<span style="float:right;padding-left:5px">'
        var span_hatebu = '<span style="float:right;padding-left:5px">' +
          '<a href="http://b.hatena.ne.jp/entry/' + deurl + '" target="_blank">' + 
          '<img alt="" src="http://b.hatena.ne.jp/entry/image/large/' +
          deurl + '"></a>'
        //要素の置き換え
        var oldtr = tr[1];
        var newtr = tr[1].replace(span, span_hatebu);
        body = body.replace(oldtr, newtr);
      }
   //自分にメール
      var mymailaddress = '<fill in your account>@gmail.com';
      var title = msg.getSubject();
      var opt = new Object();
      opt.htmlBody = body;
      GmailApp.sendEmail(mymailaddress,'Gunosy with はてブ FW:' + 
                         title,'',opt);
      msg.markRead();
    }  
  }
}

スクリプトの実行

Googleドライブでスクリプトを作成し、上記のコードを保存、スクリプトにトリガーを設定してあげれば完成です。トリガーといってもメール受信のイベントで起動させるようなトリガは(今のところ?)なく、日時によるイベントしか設定できません。しかも「7時30分」といった特定の時間に起動させる設定はできませんので、「午前7時から午前8時」といった時間帯で指定する必要があります(そうでなければ5分おきに起動するようにすることもできなくはないですが)。

遅くとも午前8時に受け取りたい場合は「午前7時から午前8時」に設定するとよいでしょう。ただしGunosyまとめメールの既定の配信時間は午前7時30分になっていますので、その場合、空振りをさけるために、配信時間を午前7時00分に変更する必要があります。

スクリプトの実行によって配信されたメールにはfacebookアイコンの横に「はてブウンター」がついています。
f:id:misozui:20131104123023p:plain

やってみてわかったこと

実際にGunosyまとめメールに「はてブウンター」をつけてみると、記事には軒並み2桁以上のブクマがついていました。冒頭の印象とは食い違うのですが、過去記事の掘り起こしとかもやっているのでしょうか。そのあたりは調べていないのでわかりませんが。