Skip to content

Instantly share code, notes, and snippets.

@insanityseanboy
Last active April 2, 2023 14:58
Show Gist options
  • Save insanityseanboy/3457a0b8190bfcd78b7ac98f71bd1f24 to your computer and use it in GitHub Desktop.
Save insanityseanboy/3457a0b8190bfcd78b7ac98f71bd1f24 to your computer and use it in GitHub Desktop.
URL Decrapifier for Google
// ==UserScript==
// @run-at document-start
// @name URL Decrapifier
// @namespace seansmod
// @description Cleans URLs from various popular sites. Also, makes sure the sites are using HTTPS.
// @include /^https?://[a-z]+\.google(\.com?)?\.[a-z]{2,3}/.*$/
// @exclude /&tbm=isch/
// @version 1
// @update https://gist.github.com/insanityseanboy/3457a0b8190bfcd78b7ac98f71bd1f24/raw/decrapifier.user.js
// @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// ==/UserScript==
// Big props to Knowbody, the (original author)[https://greasyfork.org/en/users/11757-knowbody] whose code Sean has merely modified
var doc = document;
var loc = location;
var lhost = loc.host;
var lpath = loc.pathname;
var ebay = /^[a-z.]+\.ebay(desc)?(\.com?)?\.[a-z]{2,3}$/;
var amazon = /^www\.amazon\.com?(\.[a-z]{2,3})?$/;
var google = /^[a-z]+\.google\.com?(\.[a-z]{2,3})?$/;
var amazonParams = /&(url|ie|pf_rd_[a-z]|bbn|rw_html_to_wsrp|ref_)=[^&#]*/;
var utmParams = /&utm_[a-z]+=[^&]*/g;
var neweggParams = /&(cm_sp|icid|ignorebbr)=[^&#]*/g;
var bingParams = /&(go|qs|form|FORM|filt|pq|s[cpk]|qpvt|cvid)=[^&#]*/g;
var youtubeParams = /&(feature|src_vid|annotation_id|[gh]l)=[^&#]*/g;
var ebayParams = /&(_(o?sacat|odkw|from|trksid)|rt)=[^&#]*/g;
var googleParams = /&(sa(fe)?|ved|source(id)?|s?ei|tab|tbo|h[ls]|authuser|n?um|ie|aqs|as_qdr|bav|bi[wh]|bs|bvm|cad|channel|complete|cp|s?client|dpr|e(ch|msg|s_sm)|g(fe|ws)_rd|gpsrc|noj|btnG|o[eq]|p(si|bx|f|q)|rct|rlz|site|spell|tbas|usg|xhr|gs_[a-z]+)=[^&#]*/g;
// -------- Main --------
// sean: removed these from meta tags
//sean: also added exclude above: excluding google's image search since this script creates bugs with that interface
// @include /^https?://[a-z.]+\.ebay(desc)?(\.com?)?\.[a-z]{2,3}/.*$/
// @include /^https?://www\.amazon(\.com?)?\.[a-z]{2,3}/.*$/
// @include /^https?://www\.newegg\.c(om|a)/.*$/
// @include /^https?://www\.bing\.com/.*$/
// @include https://www.youtube.com/*
// @include http://stat.dealtime.com/*
// @include http://www.imdb.com/*
// @include /https?://(www\.)?staticice\.com\.au/.*$/
// @include https://www.facebook.com/*
// @include /https?://[a-z0-9.]*twitter.com/.*$/
// @exclude https://apis.google.com/*
// @exclude https://accounts.google.com/*
// @exclude https://support.google.com/*
// @exclude https://www.google.com/recaptcha/api2/*
function main() {
if (lhost=='www.bing.com') {
var newUrl = cleanBing(doc.URL);
if (loc.protocol=='http:') loc.replace(newUrl);
else cleanPageUrl(newUrl);
cleanLinks('all');
}
else if (lhost=='www.youtube.com') {
if (lpath=='/watch') cleanPageUrl(cleanYoutube(doc.URL));
else if (lpath=='/redirect') loc.replace(cleanYoutubeRedir(loc.search));
cleanLinks('youtube');
}
else if (lhost.endsWith('.newegg.com')||lhost.endsWith('.newegg.ca')) {
if (loc.search) cleanPageUrl(cleanNewegg(doc.URL));
cleanLinks('newegg');
}
else if (lhost=='www.imdb.com') {
if (loc.search) cleanPageUrl(cleanImdb(doc.URL));
cleanLinks('imdb');
deleteHash();
}
else if (google.test(lhost)) {
if (lpath=='/url'||lpath=='/imgres') loc.replace(cleanGoogleRedir(loc.search));
else if (loc.search||loc.hash.match(/[&#]q=/)) {
cleanPageUrl(cleanGoogle(doc.URL));
cleanLinks('google');
googleInstant();
}
}
else if (ebay.test(lhost)) {
if (lpath.includes('/itm/')) cleanPageUrl(cleanEbayItem(loc));
else if (loc.search) cleanPageUrl(cleanEbayParams(doc.URL));
cleanLinks('ebay');
deleteHash();
}
else if (amazon.test(lhost)) {
if (lpath.includes('/dp/')) cleanPageUrl(cleanAmazonItemdp(loc));
else if (lpath.includes('/gp/product')) cleanPageUrl(cleanAmazonItemgp(loc));
else if (loc.search) cleanPageUrl(cleanAmazonParams(doc.URL));
cleanLinks('amazon');
onhashchange = function() {
if (!loc.hash.startsWith('#reader_'))
history.replaceState(null,null,loc.href.replace(loc.hash,''));
};
}
else if (lhost.endsWith('staticice.com.au')) {
cleanLinks('staticice');
}
else if (lhost=='twitter.com') {
cleanLinks('twitter');
}
else if(lhost=='www.facebook.com'){
cleanLinks('facebook');
}
}
// -------- Front functions --------
function cleanPageUrl(newUrl) {
if (newUrl != doc.URL) history.replaceState(null, null, newUrl);
}
function cleanLinks(site) {
new MutationObserver(function(_,self) {
console.time('clean');
for (let link of doc.links) {
if (!link.classList.contains('cleaned')) {
linkCleaners[site](link);
link.classList.add('cleaned');
}
}
console.timeEnd('clean');
}).observe(doc, {childList:true, subtree:true});
}
function deleteHash() {
function onhashchange() {
history.replaceState(null, null, loc.href.replace(loc.hash, ''));
}
}
function googleInstant() {
changeState(function(url) {
if (url.endsWith('#imgrc=_'))
return url.slice(0,-8);
else if (url.match(/#(.+&)?q=/))
return lpath + cleanGoogle(url.replace(/.+#/,'?'));
return url;
});
}
function changeState(mod) {
history._pushState = history.pushState;
history._replaceState = history.replaceState;
var args2=arguments;
history.pushState = function() {
args[2] = mod(arguments[2]);
history._pushState.apply(this,args2);
main();
};
history.replaceState = function() {
args[2] = mod(arguments[2]);
history._replaceState.apply(this,args2);
main();
};
}
// -------- URL cleaning functions --------
function cleanGoogle(url) {
return url.replace('?','?&').replace(googleParams,'').replace('?&','?');
}
function cleanGoogleRedir(url) {
return decodeURIComponent(url.match(/[&?](img)?url=([^&]+)/)[2]);
}
function cleanBing(url) {
return url.replace('?','?&').replace(bingParams,'').replace('?&','?').replace(/^http\:/,'https:');
}
function cleanYoutube(url) {
return url.replace("?","?&").replace(youtubeParams,'').replace("?&","?");
}
function cleanYoutubeRedir(url) {
return decodeURIComponent(url.match(/[?&]q=([^&]+)/)[1]);
}
function cleanEbayParams(url) {
return url.replace('?','?&').replace(ebayParams,'').replace('?&','?');
}
function cleanEbayItem(a) {
return a.origin+'/itm'+a.pathname.match(/\/[0-9]{12}/)+(a.search.replace('&','?').match(/\?orig_cvip=[^?]+/)||'')+a.hash;
}
function cleanEbayPulsar(url) {
return loc.origin + '/itm/' + url.match(/%7B%22mecs%22%3A%22([0-9]{12})/).pop();
}
function cleanNewegg(url) {
return url.replace('?','?&').replace(neweggParams,'').replace('?&','?');
}
function cleanAmazonParams(url) {
return url.replace('?','?&').replace(amazonParams,'').replace('?&','?').replace(/\?$/,'');
}
function cleanAmazonItemgp(a) {
return a.origin+'/gp/product'+a.pathname.match(/\/[A-Z0-9]{10}/)+a.hash;
}
function cleanAmazonItemdp(a) {
return a.origin+'/dp'+a.pathname.match(/\/[A-Z0-9]{10}/)+a.hash;
}
function cleanImdb(url) {
return url.replace('?','?&').replace(/&(pf_rd_[a-z]|ref_)=[^&#]*/,'').replace('?&','?').replace(/\?$/,'');
}
function cleanGenericRedir(url) {
return decodeURIComponent(url.match(/[?&]u(rl)?=([^&]+)/)[2]);
}
function cleanUtm(url) {
return url[0]+('&'+url.slice(1)).replace(utmParams,'').slice(1);
}
function cleanStaticiceRedir(url) {
return decodeURIComponent(url.match(/[?&]newurl=([^&]+)/)[1]);
}
function cleanClixgalore(url) {
return decodeURIComponent(url.match(/[?&]AffDirectURL=([^&]+)/)[1]);
}
// -------- Link cleaning functions --------
var linkCleaners = {
all:function(a) { host=a.host; path=a.pathname;
if (google.test(host))
if (path=='/imgres'||path=='/url') a.href = cleanGoogleRedir(a.search);
else if (a.search) a.search = cleanGoogle(a.search);
else if (host=='www.youtube.com')
if (path=='/watch') a.search = cleanYoutube(a.search);
else if (path=='/redirect') a.href = cleanYoutubeRedir(a.search);
else if (host.endsWith('.newegg.com') || host.endsWith('.newegg.ca'))
if(a.search) a.search = cleanNewegg(a.search);
else if (host=='www.imdb.com' && a.search)
a.search = cleanImdb(a.search);
else if (amazon.test(host))
if (path.includes('/dp/')) a.href = cleanAmazonItemdp(a);
else if (path.includes('/gp/product')) a.href = cleanAmazonItemgp(a);
else if (a.pathname.includes('/picassoRedirect')) {
a.href = cleanGenericRedir(a.search);
a.search = '';
}
else if (a.search) a.href = cleanAmazonParams(a.href);
if (a.pathname.includes('/ref=')) a.pathname = cleanAmazonParams(a.pathname);
else if (ebay.test(host))
if (path.includes('/itm/')) a.href = cleanEbayItem(a);
else if (a.host.startsWith('pulsar.')) a.href = cleanEbayPulsar(a.search);
else if (a.search) a.search = cleanEbayParams(a.search);
else {
if (a.search) a.search = cleanUtm(a.search);
if (a.hash) a.hash = cleanUtm(a.hash);
}
},
amazon:function(a) {
if (amazon.test(a.host))
if (a.pathname.includes('/dp/')) a.href = cleanAmazonItemdp(a);
else if (a.pathname.includes('/gp/product')) a.href = cleanAmazonItemgp(a);
else if (a.pathname.includes('/picassoRedirect')) {
a.href = cleanGenericRedir(a.search);
a.search = '';
}
else if (a.search) a.href = cleanAmazonParams(a.href);
if (a.pathname.includes('/ref=')) a.pathname = cleanAmazonParams(a.pathname);
},
ebay:function(a) {
if (ebay.test(a.host))
if (a.pathname.includes('/itm/')) a.href = cleanEbayItem(a);
else if (a.host.startsWith('pulsar.')) a.href = cleanEbayPulsar(a.search);
else if (a.search) a.search = cleanEbayParams(a.search);
},
newegg:function(a) {
if (a.host.endsWith('.newegg.com')||a.host.endsWith('.newegg.ca'))
if (a.pathname.includes('/marketplace/'));
else if (a.search) a.search = cleanNewegg(a.search);
},
google:function(a) {
a.removeAttribute('onmousedown');
linkCleaners.all(a);
},
youtube:function(a) {
a.classList.remove('yt-uix-redirect-link');
a.classList.remove('spf-link');
a.removeAttribute('data-sessionlink');
old = a.href;
linkCleaners.all(a);
if (a.title==old) a.title=a.href;
},
staticice:function(a) {
if (a.host.endsWith('staticice.com.au')) {
if (a.pathname=='/cgi-bin/redirect.cgi') {
a.href = cleanStaticiceRedir(a.search);
if (a.host=='www.clixgalore.com' && a.pathname=='/PSale.aspx')
a.href = cleanClixgalore(a.search);
}
else if (a.pathname.startsWith('/cgi-bin/www.'))
a.href = 'http://'+a.pathname.slice(9);
}
if (a.host=='t.dgm-au.com' || a.host=='www.kqzyfj.com') a.href = cleanGenericRedir(a.search);
if (a.search) a.search = cleanUtm(a.search);
},
twitter:function(a) {
if (a.host=='t.co') {
var dirty;
if (a.hasAttribute('data-expanded-url')) {
dirty = 'twitterRedir_'+a.pathname.slice(1);
a.href = a.getAttribute('data-expanded-url');
a.removeAttribute('data-expanded-url');
sessionStorage.setItem(dirty, a.href);
}
else if (a.classList.contains('TwitterCard-container')) {
dirty = 'twitterRedir_'+a.pathname.slice(1);
var clean = sessionStorage.getItem(dirty);
if (clean) a.href = clean;
}
}
},
facebook:function(a) {
if (a.hasAttribute('onclick') && a.hasAttribute('onmouseover')) {
if (a.getAttribute('onclick').startsWith('LinkshimAsyncLink')) {
a.removeAttribute('onclick');
a.removeAttribute('onmouseover');
if (a.host=='l.facebook.com')
a.href = cleanGenericRedir(a.search);
}
}
},
imdb:function(a) {
if (a.host=='www.imdb.com' && a.search)
a.search = cleanImdb(a.search);
}
};
main();
@Korb
Copy link

Korb commented Feb 24, 2023

The script does not work with links pasted by the Augmented Steam browser extension. Links like https://steamdb.info/app/.../?utm_source=Steam&utm_medium=Steam&utm_campaign=SteamDB%20Extension and https://pcgamingwiki.com/api/appid.php?appid=...&utm_source=Steam&utm_medium=Steam&utm_campaign=SteamDB%20Extension remain unchanged. Mozilla Firefox 111.0b5 (64-bit), Tampermonkey 4.18.1 (January 17, 2023).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment