2008年11月26日水曜日

はてブしている人がよく付けるタグを表示するグリモン

はてながリニューアルされたのを記念して?久しぶりにグリモンを書いてみた。
すんごい適当及び初心者書いているので汚いし、不効率だし、不具合あるかも。
tagにXSSとか仕込まれるとやばい?そんなことする奴いるかしらんけどw

はてブしている人がよく付けるタグを表示するグリモン
先日はてながリニューアルされてお気に入り機能が強化されました。
お気に入り機能は気に入ったブックマーカーを登録しておくことで、その人が登録したブックマークを追えるようになるんだけど、何を持ってお気に入りにするかって判断する基準が乏しいのでブコメのところにその人が付けているタグTop3を表示させてみました。
これで、ブコメチェックしつつ自分と似たようなタグを付けている人を探しやすくなるのでお気に入りに入れる判断の手助けになるかなっと思います。

以下ソース - (bloggerの機能で一部欠ける・・・需要合ったらjs上げるのでコメントください)

// ==UserScript==
// @name favoritetags
// @namespace jp.mamono.favoritetags
// @include http://b.hatena.ne.jp/entry/*
// ==/UserScript==
(function (){
var cloudStr = 'tag-cloud-size-';
var baseCloudsize = 9;
var overCloudsize = 11;
var maxTag = 3;

function Tag(tagElement) {
this.tag = tagElement;
this.getName = function() {
return this.tag.getElementsByTagName('a')[0].textContent;
}
this.getSize = function() {
return parseInt(this.tag.getElementsByTagName('span')[0].textContent.match(/\d+/));
}
this.getText = function() {
return this.getName() + this.tag.getElementsByTagName('span')[0].textContent;
}
}

function d() {
alert('test');
}

function addFavoriteTags(usertag) {
function onload(response) {
var result = new Array();
if (response.responseText != null) {
var tags = findTags(response.responseText).getElementsByTagName('li');
for (var i = 0; i < tags.length; i++) {
result.push(new Tag(tags[i]));
}
}
if (result.length == 0) return;
result.sort(function(o1, o2) { return o2.getSize() - o1.getSize(); });
var addTag = document.createElement('span');
addTag.setAttribute('style', 'font-size:80%');
for (var i = 0; i < result.length; i++) {
if (i >= maxTag) break;
addTag.textContent = addTag.textContent + result[i].getText();
}
usertag.parentNode.insertBefore(addTag, usertag.nextSibling);
}
GM_xmlhttpRequest({ method: "GET", url: 'http://b.hatena.ne.jp/' + usertag.text + '/', onload: onload });
}

function findTags(html) {
var result = new Array();
var sep = '\n';
var t = html.split(sep);
var addflag = false;
for (var i = 0; i < t.length; i++) {
if (t[i].match(/
    /i)) {
    addflag = true;
    }
    if (addflag && t[i].match(/<\/ul>/i)) {
    addflag = false;
    result.push(t[i]);
    }
    if (addflag) {
    result.push(t[i]);
    }
    }
    return (new DOMParser()).parseFromString('' +
    result.join(sep) + '', "application/xml");
    }

    var aTags = document.getElementsByTagName('a');
    for (var i = 0; i < aTags.length; i++) {
    if (aTags[i].getAttribute('class') == 'username') {
    addFavoriteTags(aTags[i]);
    }
    }
    })();


・苦労した点
はてブのページがそのままではDOMParserに通らなかったので自前でパースしたところ。
終了タグが付いてないのがいくつかあるっぽい・・・。
そういう場合どうすればいいんだろ?

・TODO
Top3タグにクリックするとタグページに飛ぶリンクを付加
お気に入り追加ボタンの挿入←できるのかわかんない

0 件のコメント: