IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

はてブのホッテントリを Pathtraq の人気順に並び替える Bookmarklet を作ってみた

さっそく何か作ってみた

http://b.hatena.ne.jp/hotentry で以下のブックマークレットを実行してください

javascript:var s=document.createElement('script');s.src="http://amachang.art-code.org/pathtraq/page_counter2.js";document.body.appendChild(s);void(0)

はてブホッテントリPathtraq の人気順に並びます。

ソースは以下のようになってます

(function() {
    var entryXPath = 'div[@class="entry"]';
    var parentXPath = '//div[@class="optionsub"]';

    var parent = document.evaluate(parentXPath, document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
    var r = document.evaluate(entryXPath, parent, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

    var elements = [];
    for (var i = 0; i < r.snapshotLength; i ++)
        elements.push(r.snapshotItem(i));

    var hash = {};
    var script = document.createElement('script');
    script.src = 'http://api.pathtraq.com/page_counter2?callback=__pathtraqCallback__&' + elements.map(function(e) {
        var href = document.evaluate('.//a', e, null, XPathResult.FIRST_ORDERED_NODE_TYPE , null).singleNodeValue.href;
        href = href.replace(/#.*$/, '');
        hash[e.id] = href;
        return 'url=' + encodeURIComponent(href);
    }).join('&');
    document.body.appendChild(script);

    window.__pathtraqCallback__ = function(obj) {
        elements.sort(function(a, b) {
            return obj.items[hash[b.id]] - obj.items[hash[a.id]];
        }).each(function(e) {
            parent.appendChild(e);
        });
    };
})();

このように

一気に 50 URL くらい投げられるようになったのは便利ですね!