Skip to content

Instantly share code, notes, and snippets.

@libraplanet
Last active June 20, 2020 13:05
Show Gist options
  • Save libraplanet/8b8f693a497adffdeed9624a1ca05d6f to your computer and use it in GitHub Desktop.
Save libraplanet/8b8f693a497adffdeed9624a1ca05d6f to your computer and use it in GitHub Desktop.
!remove harmful content on youtube.
Youtubeにはブロック リストがないため、
検索時などに有害なコンテンツが目に付き、
精神衛生上、非常によろしくない。
また、ブロック リスト機能が有料ででもなく。
誤って有害コンテンツを表示しようものなら、
愚投稿者の懐に貢献してしまったかと思うと、
非常に死にたくなる。
誤って有害コンテンツとのエンカウントを減らし、心の安寧を保つため、
一覧などから特定のキーワードを持つコンテンツを非表示にする。
また、1秒毎にポーリングを行い、定期的に削除を行う。
追加キーワードは
  blockKeywordList
に追加する。
// ==UserScript==
// @name remove youtube blocks
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://youtube.com/*
// @match http://*.youtube.com/*
// @match https://youtube.com/*
// @match https://*.youtube.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
let blockKeywordList = [
//遠藤チャンネル
'遠藤チャンネル',
'/channel/UCqzseIu9HwM1xW13uwexPfw',
'遠藤チャンネル サブ',
'/channel/UCaqVao36pGmxXUF26B8KgIg',
'遠藤ちゃんねる',
//ちゃんねるゴッホ
'ちゃんねるゴッホ',
'/channel/UCc5gHNgTXP4jN9z0jMk3dEw',
//かみなりおやじ
'/channel/UCxvpLlNz1k9O11UJsNoZUQA',
//ボビーオロゴン偽親戚系
'DQN NETWORK NORAINU',
'/channel/UCS6yh5rGM4LhSQ2ZnQcM35w',
//(遠藤チャンネル二番煎じ)
'ナイス達也チャンネル',
'/channel/UCyBgQRh5ppnA9F202hFsOBA',
//(遠藤チャンネル二番煎じ)
'勇者ナリボン',
'/channel/UCwgX--wz3wBEmLFcfWV7fRg',
//ボビーオロゴン偽親戚系
'真実の館',
'/channel/UCQ4N7j6WrDbJUjSwEzkFueg',
//ボビーオロゴン偽親戚系
'寺田メンバー',
'/channel/UCDJ1DGfp-ZoA_XDWg4KuOsA',
//ボビーオロゴン偽親戚系
'アキックスTV',
'/channel/UCDW9sZlOybFMYWkQn48R0Ow',
//ボビーオロゴン偽親戚系
'TOMOKIN - エンタメ大学',
'/channel/UCoKiJNjQZfpvKsDR_j4N5pA',
//ボビーオロゴン偽親戚系
'PROWRESTLING SHIBATAR ZZ',
'/user/PROWRESTLINGSHIBATAR',
//ボビーオロゴン偽親戚系
'キラー仮面',
'/channel/UC3lvC1XmjZ8CgiCNsVC4xFg',
//ボビーオロゴン偽親戚系
'だっすー',
'/channel/UCZXkxDM-ReQGTtDKRc6XWJw',
//ボビーオロゴン偽親戚系
'ルクセンブルク',
'/channel/UCmZdLg7SAh04ZFbp-6Kw3Dw',
//ボビーオロゴン偽親戚系
'焦がし卵',
'/channel/UCKuCAdGC7AQcTnaIslAp42w',
//ボビーオロゴン偽親戚系(+)
'タカユキtwistclubチャンネル',
'/channel/UCh0_JLH2w-0hbxaXeoYcqeA',
//ボビーオロゴン偽親戚系(+)
'田中チャンネル',
'/user/artimport123',
//ボビーオロゴン偽親戚系
'ただの無職TV',
'/channel/UCgASWjicogZE7KJydqY1E6A',
//ボビーオロゴン偽親戚系
'ヤマタノワロシュ',
'/channel/UCcwOHjrjY0-8_B95Hp37BGw',
//ボビーオロゴン偽親戚系
'Vの星チャンネル',
'/channel/UCKOh1dtkHWCv7Y_cPOYf5Xw',
//ボビーオロゴン偽親戚系
'S級バックラー黒澤',
'/channel/UC9xkFx7qVnh7Bh6kXN4ZgoQ',
//ボビーオロゴン偽親戚系
'江藤チャンネル',
'/channel/UCDPkj0lT5KKFuQq-RnXWQFQ',
//ボビーオロゴン(+)
'Tomoreともーれ',
'/channel/UC1p5XrLO2s65fwL57iG4mYA',
//ボビーオロゴン(+)
'つぷ太郎',
'/channel/UC6oW3iIxN97P4pD9kVRmYDw',
//ボビーオロゴン(+)
'藤チャンネル',
'/channel/UCUf-c6cdY1MRzHb6Cqi3lzg',
//ボビーオロゴン偽親戚系
'オーバーヘッドキック ユダ',
'/channel/UC1B6_3SxN_rjh_WXJb2ubXw',
//ザコえもんハリウッド
'ザコえもんハリウッド',
'/channel/UCqkdRf41sC4hKToy20kSPAw',
//ボビーオロゴン偽親戚系
'YKアドバイザー',
'/user/ukiyologist',
//偽親戚系
'坂口章チャンネル',
'/channel/UCSjupEbctuhbu3vdpl7NZxA',
];
let baseMediaSelectorList = [
'ytd-video-renderer' ,
'ytd-channel-renderer' ,
'ytd-playlist-renderer' ,
'ytd-shelf-renderer',
'ytd-rich-item-renderer',
'ytd-grid-video-renderer',
'ytd-grid-channel-renderer' ,
'ytd-grid-playlist-renderer' ,
];
let baseAdSelectorList = [
'ytd-search-pyv-renderer',
'ytd-promoted-video-renderer',
];
let checkedAttribute = 'data-checked-status';
let getUncheckedNodeListFromSelectorList = function(srcBaseSelectorList) {
var retList = [];
Array.prototype.forEach.call(srcBaseSelectorList, function(baseSelector){
document.querySelectorAll(baseSelector + ':not([' + checkedAttribute + '])').forEach(function(elm) {
retList.push(elm);
});
});
return retList;
}
let eachBlock = function(srcElmList, isBlockCalllback) {
Array.prototype.forEach.call(srcElmList, function(elm) {
var b;
if(isBlockCalllback) {
b = isBlockCalllback(elm);
} else {
b = true;
}
if(b) {
elm.style.display = 'none';
elm.style.backgroundColor = '#FF0000'
elm.setAttribute(checkedAttribute, 'block');
} else {
elm.setAttribute(checkedAttribute, 'allow');
}
});
}
let f = function() {
let elmMediaList = getUncheckedNodeListFromSelectorList(baseMediaSelectorList);
let elmAdList = getUncheckedNodeListFromSelectorList(baseAdSelectorList);
//block media
eachBlock(elmMediaList, function(elm) {
let str = elm.outerHTML;
let ret = false;
blockKeywordList.forEach(function(key){
let isStr = (str.indexOf(key) >= 0);
ret |= isStr;
});
return ret;
});
//block ad
eachBlock(elmAdList);
console.log('elmMediaList=[' + elmMediaList.length + ']');
console.log('elmAdList=[' + elmAdList.length + ']');
};
document.debugYoutubeBlock = f;
setInterval(f, 1000);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment