Posted 8 years ago
·
Author
About
This is a Greasemonkey script I'm working on to hide all content on YouTube that I deem to be cancerous or otherwise uninteresting. Hopefully making it much faster to find what you're interested in.
Prerequisites
For FireFox users install Greasemonkey: https://addons.mozilla.org/en-US/firefo ... asemonkey/
Downloads
This is a WIP script and is also subjective. Therefore there is no install link, you must install it manually and edit it as you see fit.
Here's the working part of the script:
And here's the full broken script:
The goal is to have a script that first scans each channel shelf (if you're on the homepage) and removes all cancerous videos from them. Then it removes all channel shelves that have 0 videos left. After that it scans each remaining video title and author name and removes them if they are cancerous. This whole process than repeats as you scroll down and new channel shelves are added.
Right now scrolling doesn't work properly and neither does cancer detection for the channel shelves. Adding in the shelf code also breaks the script.
If you're on a results page it will simply hide any videos on the page that are cancerous as you load the page.
This is a Greasemonkey script I'm working on to hide all content on YouTube that I deem to be cancerous or otherwise uninteresting. Hopefully making it much faster to find what you're interested in.
Prerequisites
For FireFox users install Greasemonkey: https://addons.mozilla.org/en-US/firefo ... asemonkey/
Downloads
This is a WIP script and is also subjective. Therefore there is no install link, you must install it manually and edit it as you see fit.
Here's the working part of the script:
// ==UserScript==
// @name YouTube Chemotherapy
// @namespace TIMDM
// @description Hides cancerous content from YouTube
// @include *.youtube.com/*
// @version 1
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
/*
Blacklisted Strings
*/
var cancerousTerms = [
'prank',
'drama',
'minecraft',
'troll',
'pokemon',
]
/*
Regular Expressions to match
*/
var topListRegex = /top\s+\d+/i;
var listRegex = /^[\d]+\s/i;
$(document).ready(function () {
//Video Titles
testVideos(".yt-lockup-title");
//Video Authors
testVideos("a.g-hovercard");
});
function testVideos(el) {
if(el) {
$(el).each(function() {
if (contentIsCancerous($(this).text())) {
//Remove the video shelf item from the channel shelf
$(this).closest(".yt-lockup-video").remove();
}
});
}
}
function contentIsCancerous(content) {
if(topListRegex.test(content)) {
console.log("Regex Match. Removing Top List:" + content);
return true;
}
if(listRegex.test(content)) {
console.log("Regex Match. Removing List:" + content);
return true;
}
for (var i = 0; i < cancerousTerms.length; ++i) {
if (content.toLowerCase().indexOf(cancerousTerms[i].toLowerCase()) !== -1) {
console.log("Blacklisted String Match: " + cancerousTerms[i]);
return true;
}
}
return false;
}
And here's the full broken script:
Spoiler: Broken Script
// ==UserScript==
// @name YouTube Chemotherapy
// @namespace TIMDM
// @description Hides cancerous content from YouTube
// @include *.youtube.com/*
// @version 1
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
//Add your cancerous and/or unwanted keywords here
var cancer = [
'Prank',
'Drama',
'Minecraft',
'Troll',
'top 10',
'pokemon',
]
$(document).ready(function () {
checkChannels('.feed-item-container');
checkVideos('.yt-lockup-title');
checkVideos('a.g-hovercard');
cleanUp();
});
//This is for automatically cleaning new video shelfs as they appear when you scroll
var lastScroll = 0;
$(window).scroll(function(){
var st = $(this).scrollTop();
//If scrolling down
if (st > lastScroll){
checkChannels('.feed-item-container');
checkVideos('.yt-lockup-title');
checkVideos('a.g-hovercard');
//cleanUp();
}
//Updates scroll position
lastScroll = st;
})
//Checks video information for cancer
function checkVideos(el) {
if (el) {
$(el).each(function () {
console.log("Text: " + $(this).text());
if (contentIsCancerous($(this).text())) {
console.log("Found Cancer");
Remove the video shelf item from the channel shelf
$(this).closest('.yt-lockup-video').remove();
$(this).closest('li').remove();
}
});
}
}
//Checks channel information for cancer
function checkChannels(el) {
if (el) {
$(el).each(function () {
//Grab the channel name
var channelTitle = $(this).find('span.branded-page-module-title-text');
//If the channel name exists
if (channelTitle.length > 0) {
if (contentIsCancerous(channelTitle.text())) {
//Remove the channel shelf from the homepage
$(this).remove();
}
}
});
}
}
//Removes shelves that have no videos after cancer removal
function cleanUp() {
$(".feed-item-container").each(function() {
var videoList = $(this).find("ul.yt-uix-shelfslider-list");
if(videoList.length > 0) {
console.log("videolist found");
if (videoList.children().length == 0) {
console.log("no children);
$(this).parents(".feed-item-container").remove();
}
} else {
//console.log("videolist not found");
}
});
}
//Compares content to cancer array
function contentIsCancerous(a) {
for (var i = 0; i < cancer.length; ++i) {
if (a.toLowerCase().indexOf(cancer[i].toLowerCase()) !== - 1) {
console.log('Found Cancer: ' + a);
return true;
}
}
return false;
}
The goal is to have a script that first scans each channel shelf (if you're on the homepage) and removes all cancerous videos from them. Then it removes all channel shelves that have 0 videos left. After that it scans each remaining video title and author name and removes them if they are cancerous. This whole process than repeats as you scroll down and new channel shelves are added.
Right now scrolling doesn't work properly and neither does cancer detection for the channel shelves. Adding in the shelf code also breaks the script.
If you're on a results page it will simply hide any videos on the page that are cancerous as you load the page.