■
http://d.hatena.ne.jp/strange/20051027#p1
しば氏のエントリを見て、なるほどとおもってみたので書いてみた。
たぶん、こういう物は既に有るだろうが。
Hello Grease Monkey
//newfrienddiarymod.user.js // 一応UTF-8に変換してつかってね // ==UserScript== // @name new friend diary mod // @namespace http://d.hatena.ne.jp/zim/ // @description new friend diary mod // @include http://mixi.jp/new_friend_diary.pl // ==/UserScript== // mixi の新着マイミク日記を以前の雰囲気に再現します、時刻がとれません // Ajaxを使っているので動作が非同期で重い // Hello worldとして作っただけで、俺も使ってはいません // 野地 尚弘 http://d.hatena.ne.jp/zim/ // "Javascript".replace()等の日本語のとおらなさは異常 (function() { //関数群 function reload_List(){ //DIV箱にidListとHtmlListを元に描画 idList.sort().reverse(); html = ""; for(i=0; idList.length>i; i++) html = html + listHtml[idList[i]]; document.getElementById("out").innerHTML = html; } function toDiaryList(request, user_name) { //ajaxレスポンスを整形&配列に投入、配列更新 > HTML再描画 var data = request.responseText; _dataList = data.match(/<div.*?<\/div>/g); for(i=1; _dataList.length>i; i++){ //※i=1 1行目はゴミ _id = _dataList[i].replace(/<div.*?id=/, '').replace(/&owner_id=[0-9]+">.*?<\/a><\/div>/,'') ; listHtml[_id] = _dataList[i].replace(/<div.*?>/,'').replace(/<\/div>/,'').replace(/<img.*?>/,'') + user_name + "<br>"; idList[idList.length] = _id; } reload_List(); } function requestNewDiary(user_id,user_name) { // ajaxインスタンス生成(this) > 配列更新 toDiaryList() > HTML再描画 reload_List() var url = '/ajax_new_diary.pl'; var myAjax = new Ajax.Request( url, { method: 'get',parameters: 'friend_id=' + user_id,onComplete: function (request) { toDiaryList(request,user_name);} } ); } //UID等を /new_friend_diary.pl から集める、とても汚い実装(笑い uidList = document.body.innerHTML.match(/owner_id=[0-9]+/g); for(i=0;uidList.length > i;i++) uidList[i] = uidList[i].replace(/owner_id=/,''); nameList = escape( document.body.innerHTML ).match(/view_diary\.pl.*?%0A/g); for(i=0;nameList.length > i;i++) nameList[i] = unescape( nameList[i].replace(/.*%3C\/a%3E%20/,'') ); //既存のテーブルを適当にツブしてDIV箱を作る document.body.innerHTML = document.body.innerHTML.replace(/<!-- end: page link -->[\s\S]*<!-- start: page link -->/g, '<div id="out" align="left"></div>'); var idList = new Array(); // 日記IDのリスト(ソートと数数え用) var listHtml = new Object(); // 日記ID毎の表示HTML for(i=0;uidList.length > i;i++) requestNewDiary(uidList[i],nameList[i]); // リクエスト実行 })();
Javascriptの正規表現がもっとマトモに動けばさらさら書けるのに、挙動がおかしい*1ので弱った。
後、動作がメチャクチャ遅いのは、再描画がなんどもなんどもなんd 呼ばれるからなので、一度にすべきだ*2。