mixi 6 years diary

By Eiji Ito Last update Jan 27, 2012 — Installed 2,117 times.

There are 9 previous versions of this script.

// ==UserScript==
// @name           mixi 6 years diary
// @namespace      http://aeg.jugem.jp
// @include        http://mixi.jp/
// @include        http://mixi.jp/view_diary.pl?id=*
// @include        http://mixi.jp/home.pl*
// @require        http://code.jquery.com/jquery-1.7.min.js

// ==/UserScript==
// Version 1.6

(function() {


   var pastYears = 6;
   var lastDiaryNum = 5;

    var t = new Array(2);

   function update_diary_list(id, year, month, day) {
      function on_list_diary(response) {
         var s = "";
         var pattern = new RegExp(
               "<dt>(<input name=\"diary_id\"[^>]+>)?<a href=\"(view_diary\\.pl\\?id=\\d+&owner_id=\\d+)[^>]*>([^<]*)<\/a>",
               "ig");
//         var pattern = new RegExp("<dt>(<input name=\"diary_id\"[^>]+>)?<a href=\"(view_diary\\.pl\\?id=(\\d+)&owner_id=\\d+)[^>]*>([^<]*)<\/a><span><a[^>]+>[^<]+</a></span><img[^<]+</dt>\n<dd>([^>]+)</dd>\n</dl>\n</div>\n.*\n<p>[^<]+</p>\n<div[^>]+>\n<ul>\n<li><a[^>]+>[^<]+</a></li>\n<li><a[^>]+>\u30b3\u30e1\u30f3\u30c8\uff08(\\d+)\uff09", "ig");

         var m;
         var c=0;
//         while (m = pattern.exec(response.responseText)) {
           while ((m = pattern.exec(response.responseText)) && (c++ < lastDiaryNum)) {
            s += '<li><a href="' + m[2] + '">' + m[3] + '</a>\n';
//               s += '<li><a href="'+ m[2] + '">' + m[4] +'('+ m[6] +')'+'</a>\n';
           }
         if (s != "") {
            s = "<ul>\n" + s + "</ul>\n";
         }
         t[year].innerHTML = s;
         return;
      }
      GM_xmlhttpRequest({
         method : "GET",
         url : "http://mixi.jp/list_diary.pl?id=" + id + "&year=" + year
               + "&month=" + month + "&day=" + day,
         onload : on_list_diary
      });
      return;
   }

   function update_diary_list_home(id, year, month, day) {
      var cache_key = "cache" + (n_year - year);
      var cache_str_key = cache_key + "_str";
      var today = year + "/" + month + "/" + day;
      var cache_date = GM_getValue(cache_key);

      function on_list_diary(response) {
         var s = "";
         var pattern = new RegExp(
               "<dt>(<input name=\"diary_id\"[^>]+>)?<a href=\"(view_diary\\.pl\\?id=\\d+&owner_id=\\d+)[^>]*>([^<]*)<\/a>",
               "ig");
         var m;
         while (m = pattern.exec(response.responseText)) {
            s += '<li><a href="' + m[2] + '">' + m[3] + '</a>\n';
         }
         if (s != "") {
            s = "<ul>\n" + s + "</ul>\n";
         }
         t[year].innerHTML = s;
         GM_setValue(cache_key, (year == n_year)? false :today);
         GM_setValue(cache_str_key, s);
         return;
      }

       var urlstr = "http://mixi.jp/list_diary.pl";
       if (year != n_year) {
          urlstr = "http://mixi.jp/list_diary.pl?id="+id+"&year="+year+"&month="+month+"&day="+day;
      }
      if (cache_date == undefined) {
         GM_xmlhttpRequest({
            method : "GET",
            url : urlstr,
            onload : on_list_diary
         });
      } else if (cache_date == today) {
         var s = GM_getValue(cache_str_key);
         if (s != undefined) {
            t[year].innerHTML = s;
         } else {
            GM_xmlhttpRequest({
               method : "GET",
               url : "http://mixi.jp/list_diary.pl?id=" + id + "&year=" + year
                     + "&month=" + month + "&day=" + day,
               onload : on_list_diary
            });
         }
      } else {
         GM_xmlhttpRequest({
            method : "GET",
            url : "http://mixi.jp/list_diary.pl?id=" + id + "&year=" + year
                  + "&month=" + month + "&day=" + day,
            onload : on_list_diary
         });
      }
      return;
   }

   function ViewDiary() {
      var oid = "";
      if (url.match(/view_diary.pl\?id=.*\&owner_id=(\d+)/)) {
         oid = RegExp.$1;
      } else {
          return;
      }

      var date = $('div.listDiaryTitle dl dd:first').text();

      var m = date.match(/(\d+)\u5E74\s*(\d+)\u6708\s*(\d+)\u65e5/);
      var year = RegExp.$1;
      var month = RegExp.$2;
      var day = RegExp.$3;

      GM_log(year + "/" + month + "/" + day);

      var div = $('div.viewDiaryBox')[0];
      var diary_box = document.createElement("div");
      var str = "";
      diary_box.className = "diaryBox";

      str = '<table><tbody valign="top"><tr><th style="width: 250px;">'
            + (year - 2)
            + '\u5E74\u306E\u65E5\u8A18</th><th style="width: 250px;">'
            + (year - 1) + '\u5E74\u306E\u65E5\u8A18</th></tr>';
      str += '<tr><td id="'
            + 'div'
            + (year - 2)
            + 'diary"><font color="gray">Loading\u2026</font></td><td id="'
            + 'div'
            + (year - 1)
            + 'diary"><font color="gray">Loading\u2026</font></td></tr></tbody></table>';
      diary_box.innerHTML = str;

      div.insertBefore(diary_box, div.firstChild);
      t[year - 2] = $('#div' + (year - 2) + 'diary')[0];
      t[year - 1] = $('#div' + (year - 1) + 'diary')[0];

      update_diary_list(oid, year - 2, month, day);
      update_diary_list(oid, year - 1, month, day);

   }

   function Home() {

     // var div = $('div.myCommentHistory')
      var div =$('#myArea div div.contents:first')
       var href = $('.personalNavigation .personalNaviHome .profile a').attr(
            'href');
      if (href.match(/show_profile\.pl\?.*id=(\d+)/)) {
         oid = RegExp.$1;
      } else {
         return;
      }

      var s = '<table><tbody style="background-color: white;" valign="top">';
      for ( var i = 1; i < pastYears; i++) {
         s += '<tr><td >' + (n_year - i)
               + '\u5E74\u306E\u3042\u306A\u305F\uFF1A';
         s += '<tr><td id="' + 'div' + (n_year - i)
               + 'diary"><font color="gray">Loading\u2026</font>';
      }
      s += '</tbody></table>';
      s += '<div align="right">by <a href="http://userscripts.org/scripts/show/38520">10年連続mixi日記</a></div>';

      var element = document.createElement('div');
      element.style.cssText = 'padding:2px 0 4px; border-right:1px solid #d0d0d0; border-left:1px solid #d0d0d0;background:#ffffff;';
      element.id = "div6yearsdiary";
      element.className = "myUpdate";
      element.innerHTML = s;
      div.append(element);

      for ( var i = 1; i < pastYears; i++) {
         t[n_year - i] = $('#div' + (n_year - i) + 'diary')[0];
         update_diary_list_home(oid, n_year - i, n_month, n_day);
      }
   }

   var url = document.location.href;

   var d = new Date();
   var n_month = d.getMonth() + 1;
   var n_day = d.getDate();
   var n_year = d.getFullYear();

   if (url.match(/(\.jp\/home\.pl.*|\.jp\/?$)/)) {
      Home();
   } else {
      ViewDiary();
   }

})();