otsune's SnakeOil RSSフィード

python -c "print''.join([chr(x) for x in 111&1101,110+~-~11,10^11*11,110+~-~11,-~101,-~11^11*11,~-110,111&11*11,11+11+10,11|~-0110,1-~11^11*11,10^11*11,-~11^11*11,110,101])"

2011-02-02

Togetterフィルターを手直ししてみた

Togetterフィルターを手直ししてみた - otsune's SnakeOil  を含むブックマーク はてなブックマーク - Togetterフィルターを手直ししてみた - otsune's SnakeOil  Togetterフィルターを手直ししてみた - otsune's SnakeOil  のブックマークコメント

http://d.hatena.ne.jp/mEGGrim/20101019/1287684499 が元ネタ

// ==UserScript==
// @name TogetterFilter
// @namespace TogetterFilter
// @description Togetterを任意のユーザー名を用いてフィルタリング
// @include http://togetter.com/*
// ==/UserScript==

// ここにフィルタリングしたいユーザーのIDを''で囲い、,で区切って記述して下さい
var blackListArray = ['carejinzaibank', 'ptotjinzaibank', 'nursejinzaibank'];

var blackList = new RegExp('^(?:' + blackListArray.join('|') + ')$', 'g');

// AutoPagerizeで増えた分ではない、1ページ目のフィルタリング
    filter(document);

// AutoPagerizeにfilterをイベントとして追加
// 要AutoPagerize(version 0.40 以降)、jAutoPagerize(Rev: 33889+ 以降)
// 参考URL: http://d.hatena.ne.jp/os0x/20090829/1251556449
document.body.addEventListener('AutoPagerize_DOMNodeInserted',function(evt){
    var node = evt.target;
    filter(node);
}, false);

function filter(node) {
    if(document.URL.match(/^http:\/\/togetter\.com\/li\/\d+/)) {
        filterTweets(node);
    } else {
        filterLists(node);
    }
}

function filterTweets(node) {
    //各まとめページの発言をフィルタリング
    column = document.evaluate(
        '//div[@class="list_body"]/div[@class="status"]/a[starts-with(@href, "http://twitter.com")]', 
        node, null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );
    for (var i = 0; i < column.snapshotLength; i++) {
        thisLink = column.snapshotItem(i);
        if(thisLink.innerHTML.match(blackList)) {
            //display = 'none'にしてフィルタリング
//            thisLink.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
            thisLink.parentNode.parentNode.parentNode.parentNode.style.opacity = 0.1;
        }
    }

    // コメント欄をフィルタリング
    column = document.evaluate(
        '//div[@class="status"]/a[@class="twttrname"]', 
        node, null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );

    for (var i = 0; i < column.snapshotLength; i++) {
        thisLink = column.snapshotItem(i);
        if(thisLink.innerHTML.match(blackList)) {
            //display = 'none'にしてフィルタリング
//            thisLink.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
            thisLink.parentNode.parentNode.parentNode.parentNode.style.opacity = 0.1;
        }
    }
}

function filterLists(node) {
    column = document.evaluate(
        //*のtwitterまとめ, でまとめ主のIDを検索してフィルタリング
        //        "/html/body/div/div[3]/div/div/div/ul/li/div/div[2]/div/a",
        '//div[@class="info_infomation"]/a[contains(concat(" ", @class, " "), " icon_author ")]', 
        node, null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );
    for (var i = 0; i < column.snapshotLength; i++) {
        thisLink = column.snapshotItem(i);
        if(thisLink.innerHTML.match(blackList)) {
            //display = 'none'にしてフィルタリング
//            thisLink.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
            thisLink.parentNode.parentNode.parentNode.parentNode.style.opacity = 0.1;
        }
    }
}

display = 'none';だとフィルターが動いてるかどうかが実感できないので透明度10%でうっすら表示にしてみた。

XPathつかってるところはQuerySelectorに書き換えればもうすこしスッキリするかもなぁ。

インストールは https://gist.github.com/raw/807319/92717e85c5260f6bd001a3af3448710ca7d52c10/togetterfilter.user.js

追記

querySelectorで書きなおした

// ==UserScript==
// @name TogetterFilter
// @namespace TogetterFilter
// @description Togetterを任意のユーザー名を用いてフィルタリング
// @include http://togetter.com/*
// ==/UserScript==

// ここにフィルタリングしたいユーザーのIDを''で囲い、,で区切って記述して下さい
var blackListArray = ['carejinzaibank', 'ptotjinzaibank', 'nursejinzaibank'];

var blackList = new RegExp('^(?:' + blackListArray.join('|') + ')$', 'g');

// AutoPagerizeで増えた分ではない、1ページ目のフィルタリング
    filter(document);

// AutoPagerizeにfilterをイベントとして追加
// 要AutoPagerize(version 0.40 以降)、jAutoPagerize(Rev: 33889+ 以降)
// 参考URL: http://d.hatena.ne.jp/os0x/20090829/1251556449
document.body.addEventListener('AutoPagerize_DOMNodeInserted',function(evt){
    var node = evt.target;
    filter(node);
}, false);

function filter(node) {
    if(document.URL.match(/^http:\/\/togetter\.com\/li\/\d+/)) {
        filterTweets(node);
    } else {
        filterLists(node);
    }
}

function filterTweets(node) {
    //各まとめページの発言をフィルタリング
    var items = document.querySelectorAll(
        'div.list_body > div.status > a[href^="http://twitter.com"]'
        );
    for (var i = 0; i < items.length; i++) {
        var thisLink = items[i];
        if(thisLink.innerHTML.match(blackList)) {
            gone(thisLink);
        }
    }

    // コメント欄をフィルタリング
    var items = document.querySelectorAll(
        'div.status > a.twttrname'
        );

    for (var i = 0; i < items.length; i++) {
        var thisLink = items[i];
        if(thisLink.innerHTML.match(blackList)) {
            gone(thisLink);
        }
    }
}

function filterLists(node) {
    var items = document.querySelectorAll(
        'div.info_infomation > a.icon_author'
        );
    for (var i = 0; i < items.length; i++) {
        var thisLink = items[i];
        if(thisLink.innerHTML.match(blackList)) {
            gone(thisLink);
        }
    }
}

function gone(item){
    //display = 'none'にしてフィルタリング
    // item.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
    item.parentNode.parentNode.parentNode.parentNode.style.opacity = 0.1;
}

追記

https://gist.github.com/807644 にでforkリファクタリング版があります

トラックバック - http://subtech.g.hatena.ne.jp/otsune/20110202