// ==UserScript==
// @name SearX Results Filter
// @namespace i2p.schimon.searxfilter
// @description Remove links from search results.
// @author Schimon Jehudah, Adv.
// @copyright 2023, Schimon Jehudah (http://schimon.i2p)
// @license MIT; https://opensource.org/licenses/MIT
// @grant none
// @homepageURL https://openuserjs.org/scripts/sjehuda/SearX_Results_Filter
// @supportURL https://openuserjs.org/scripts/sjehuda/SearX_Results_Filter/issues
// @include https://SearxngInstanceUrl/search*
// @version 23.03
// @run-at document-end
// @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjRtbSIgaGVpZ2h0PSI2NG1tIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTkycHg7bGluZS1oZWlnaHQ6MDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwO3dyaXRpbmctbW9kZTpsci10YjtkaXJlY3Rpb246bHRyO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7ZG9taW5hbnQtYmFzZWxpbmU6YXV0bztiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDtzaGFwZS1wYWRkaW5nOjA7c2hhcGUtbWFyZ2luOjA7aW5saW5lLXNpemU6MDtvcGFjaXR5OjE7ZmlsbDojMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxLjI3OTgyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3N0b3AtY29sb3I6IzAwMDtzdG9wLW9wYWNpdHk6MSIgeD0iMTcuMDA1MjQ1IiB5PSIzMS42NTg0MDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00LjQzNjg1NjQgNDAuODk0OTQpIHNjYWxlKC4yNjQ1OCkiPjx0c3BhbiB4PSIxNy4wMDUyNDUiIHk9IjMxLjY1ODQwNSIgc3R5bGU9ImZvbnQtc2l6ZToxOTJweCI+8J+boO+4jzwvdHNwYW4+PC90ZXh0Pjwvc3ZnPgo=
// ==/UserScript==
// Javascript implementation of Java’s String.hashCode() method
String.prototype.hashCode = function(){
var hash = 0;
if (this.length == 0) return hash;
for (i = 0; i < this.length; i++) {
char = this.charCodeAt(i);
hash = ((hash<<5)-hash)+char;
hash = hash & hash; // Convert to 32bit integer
}
return hash;
};
// Manwe Security Consulting
const domains = [
1011086976,1072789513,1746076303,1873419916,1807696995,200689189,208906360,
165020600,-138065189,-554920372,1482490179,2041621832,508927357,332286469,
2127428686,1803821636,-772970925,60433162,2056911440,-696086213,-226216208,
568696146,2056911440,-1376709159,374301332,-1710483397,-491772566,58427465,
-2051420948,-1031144132,-333386213,1837301364,204018826,-972811757,-686515808,
-2044679369,540535309,-383025757,1591598804,-2032889839,-516285098,2056053460,
904207091,-774960864,-1704017372,754392788,253824854,1331596452,-1394732048,
-2049573906,-1694642173,1877757210,707076672,-2050497427,1073639165,1011107447,
-2067829511,1561330680,2004471051,-964488554,-2044898019,129388118,1042705622,
659999749,-1986430767,-1557529491,-1473409395,-640005308,-1830313082,1320172991,
-1452764056,1530878469,1672584528,1912841799,-631031994,-1759516559,-373274299,
1472103342,28462918,-1384399005,-1025028954,-1002905536,-1536293812,847444939,
-1240091005,-1240090634,-1610658671,426751880,1349062171,-1423874876,855396316,
-1057382331,
-1207901707, // abc.com
-224401944, // www.abc.net.au
91124052, // abcnews.go.com
-1413024603, // ap.org
-255548196, // www.ap.org
-1059667691, // apnews.com
-593770790, // ground.news
-347527963, // bbcnews.bbcstudios.com
-1856091953, // wwwnews.live.bbc.co.uk
1201632223, // www.bbc.com
824039218, // www.bbcnews.com
-770409358, // news.bbc.co.uk
1335085517, // bbc.co.uk
-577693130, // www.bbc.co.uk
758316297, // bbcnews.com
941125331, // bing.com
879422794, // www.bing.com
317218970, // bloomberglaw.com
-1802373298, // bloomberg.com
1227811639, // www.bloomberg.com
-1057277710, // www.businessinsider.com
1100257225, // businessinsider.com
106864602, // cbsnews.com
172587523, // www.cbsnews.com
-1815724417, // cnbc.com
-1877426954, // www.cnbc.com
920814198, // cnn.com
-1852122849, // www.cnn.com
369654750, // www.foxnews.com
303931829, // foxnews.com
-1242184837, // go.com
1617840950, // guardian.ng
1001802679, // www.huffpost.com
-1035607872, // huffpost.com
-471498931, // www.independent.co.uk
1881581540, // independent.co.uk
1668850948, // latimes.com
1734573869, // www.latimes.com
'mozilla.com',
'mozilla.org',
669736469, // nbcnews.com
735459390, // www.nbcnews.com
955565566, // nypost.com
-2140583194, // npr.org
2014281623, // www.nytimes.com
1948558702, // nytimes.com
1065885552, // politico.com
-1191671193, // www.politico.com
-381258527, // politico.eu
-315535606, // www.politico.eu
802420432, // www.reuters.com
736697511, // reuters.com
-2134724812, // sky.com
1103245374, // www.theguardian.com
1083347605, // theguardian.com
622620063, // thetimes.co.uk
69072598, // www.thetimes.co.uk
-2036711631, // usatoday.com
698920, // www.usatoday.com
1149470915, // washingtonpost.com
1218420346, // www.washingtonpost.com
-1328826067, // wikipedia.org
1630470305, // wsj.com
-1142466742, // www.wsj.com
-1311829293, // yahoo.com
1070359356, // www.yahoo.com
1123383988, // ca.sports.yahoo.com
'yewtu.be',
'youtu.be',
'youtube.com',
-12310945, // www.youtube.com
-78033866, // youtube.com
];
console.info('Copy the following string, if you want to filter results of this website');
console.info(location.hostname.hashCode() + ', // ' + location.hostname);
(function removeResultItems() {
// Scan results to filter
for (const link of document.querySelectorAll('a[href^="http"]')) {
var hostname, url, i = 0;
try {
url = new URL (link.href);
hostname = url.hostname;
} catch (err) {
var invalidLink = link.href;
var locationHrf = location.href;
var searchQuery = document.querySelector('input').value;
console.error(`Error: ${err}`);
console.warn(
`
WARNING! Invalid URL
URL: "${invalidLink}"
Instance: "${locationHrf}"
Query: "${searchQuery}".
Please report this to SearXNG.
`
);
}
if (hostname.endsWith('.xxx') ||
hostname.endsWith('.sex') ||
hostname.endsWith('.porn') ||
hostname.endsWith('.adult')) {
removeNode(link);
removalReason(link.href, null);
continue;
}
if (domains.includes(hostname) ||
domains.includes(hostname.hashCode())) {
removalReason(link.href, hostname);
removeNode(link);
continue;
}
if (hostname.startsWith('www.')) {
hostname =
hostname
.slice(
hostname
.indexOf('www.')+4
);
}
/*
if (domains.includes(hostname)) {
link
.closest('.result')
.remove();
}
*/
if (domains.includes(hostname) ||
domains.includes(hostname.hashCode())) {
removalReason(link.href, hostname);
removeNode(link);
continue;
}
var partedHost = hostname.split('.');
var tld = partedHost[partedHost.length-2] + '.' + partedHost[partedHost.length-1];
if (domains.includes(tld) ||
domains.includes(tld.hashCode())) {
removalReason(link.href, tld);
removeNode(link);
continue;
}
}
// When all result were filtered, navigate to next page
if (document.querySelectorAll('.result').length < 1) {
try {
document.querySelector('.next_page > * > button').click();
} catch {
alert('No results.');
}
}
// TODO Execute upon content change
document.addEventListener('scroll', removeResultItems);
// Display block rule
document.addEventListener("mouseover", function(e) {
if (e.target && e.target.nodeName == "A") {
url = new URL (e.target);
console.info(`INFO: To filter results from ${url.hostname}, use the following string ${url.hostname.hashCode() + ', // ' + url.hostname}`);
}
});
})();
function removeNode(link) {
try {
link
.closest('.result')
.remove();
} catch {
try {
link
.closest('#infoboxes')
.remove();
} catch (err) {
console.error('Error: ' + err);
}
}
}
function removalReason(url, rule) {
if (rule) {
try {
rule = domains[domains.indexOf(rule.hashCode())];
} catch {
rule = domains[domains.indexOf(rule)];
}
console.log(`Link: ${url} has been blocked by rule ${rule}`);
} else {
console.log(`Link: ${url} has been blocked by TLD rule.`);
}
}