// ==UserScript==
// @name TorrentZ [load IMDB info]
// @namespace
// @version 1.01
// @description Show info of movie/series (rating, poster, actors, ...) from IMDB on TorrentZ domains (torrentz.eu, torrentz.com, ...)
// @author hossam6236
// @license GNU General Public License v3.0
// @include https://torrentz.eu/*
// @include https://www.torrentz.eu/*
// @include https://torrentz.ph/*
// @include https://www.torrentz.ph/*
// @include https://torrentz.li/*
// @include https://www.torrentz.li/*
// @include https://torrentz.com/*
// @include https://www.torrentz.com/*
// @include https://torrentz.me/*
// @include https://www.torrentz.me/*
// @include https://torrentz.in/*
// @include https://www.torrentz.in/*
// @include https://torrentz.hk/*
// @include https://www.torrentz.hk/*
// @include https://torrentz.ch/*
// @include https://www.torrentz.ch/*
// @include https://torrents.de/*
// @include https://www.torrents.de/*
// @include https://tz.ai/*
// @include https://www.tz.ai/*
// @include https://torrentz-proxy.com/*
// @include https://www.torrentz-proxy.com/*
// @include https://bestdownload.eu/*
// @include https://www.bestdownload.eu/*
// @include https://torrentsmirror.com/*
// @include https://www.torrentsmirror.com/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
// @grant GM_xmlhttpRequest
// ==/UserScript==
// regext for cleaning the titles
var reM = /\d{4}/;
var reS = /S\d{2}E\d{2}|\d{1}x\d{2}/;
movie_db = {};
try {
var c = localStorage.getItem('movie_db');
if (c) {
$.extend(movie_db, JSON.parse(c));
}
var count = 0;
var start_button = $('<button style="position:absolute; margin:0px; padding:10px; font:12pt Tahoma;"> load IMDB info </button>');
start_button.appendTo($('h1').first());
start_button.css({height: start_button.parent().height()>0 ? start_button.parents('div').height() : start_button.parents('div').height()});
var updateElement_dl = function(stor_title, dl_element){
if (movie_db[stor_title]==false) {
$('a', dl_element).css('color','#777');
return true;
}
//alert(stor_title);
var el_title = movie_db[stor_title].imdbVotes + ' votes - ' + movie_db[stor_title].Runtime + ' - Rated ' + movie_db[stor_title].Rated + ' - Awards: ' + movie_db[stor_title].Awards;
var star = '';
var reg_wins = /([0-9]+) win(s|)/;
var reg_noms = /([0-9]+) nomination(s|)/;
var reg_wins_sig = /won ([0-9]+) /;
var reg_noms_sig = /nominated for ([0-9]+) /;
var wins = reg_wins.exec(movie_db[stor_title].Awards.toLowerCase()); if(wins) wins = parseFloat(wins[1]);
var noms = reg_noms.exec(movie_db[stor_title].Awards.toLowerCase()); if(noms) noms = parseFloat(noms[1]);
var wins_sig = reg_wins_sig.exec(movie_db[stor_title].Awards.toLowerCase()); if(wins_sig) wins_sig = parseFloat(wins_sig[1]);
var noms_sig = reg_noms_sig.exec(movie_db[stor_title].Awards.toLowerCase()); if(noms_sig) noms_sig = parseFloat(noms_sig[1]);
//if(match) alert(match[1]);
if((wins_sig >= 1 || noms_sig >= 3) && (wins >= 5 || noms >= 10)){
star = '<span style="color:#DD0000">★</span>';
}else if(wins >= 10 || (noms_sig >= 1 && noms >= 5)){
star = '<span style="color:#660000">★</span>';
}else if(wins >= 5 || noms >= 10 || noms_sig >= 1){
star = '★';
}else if(wins + noms >= 1){
star = '☆';
}
var el = '<a href="http://www.imdb.com/title/' + movie_db[stor_title].imdbID + '" target="_blank" title="' + el_title + '">' + movie_db[stor_title].imdbRating + star + '</a>';
//$('a', dl_element).first().attr('title', movie_db[stor_title].Title + ' (' + movie_db[stor_title].Year + ') - ' + movie_db[stor_title].Plot);
//$('a', dl_element).first().after(' <b style="font-size:80%;">('+movie_db[stor_title].Genre + ')</b>');
$('a', dl_element).first().on('mouseover', function(e){
poster_img.find('img').attr('src', "");
poster_img.find('img').attr('src', movie_db[stor_title].Poster);
poster_img.find('#imdb_a').attr('href', 'http://www.imdb.com/title/' + movie_db[stor_title].imdbID + '');
poster_img.find('#imdb_a').attr('title', movie_db[stor_title].Title + ' (' + movie_db[stor_title].Year + ')');
poster_img.find('#imdb_title').html(movie_db[stor_title].Title);
poster_img.find('#imdb_year').html(movie_db[stor_title].Year);
poster_img.find('#imdb_rating').html(movie_db[stor_title].imdbRating);
poster_img.find('#imdb_votes').html(movie_db[stor_title].imdbVotes);
poster_img.find('#imdb_rated').html(movie_db[stor_title].Rated);
poster_img.find('#imdb_runtime').html(movie_db[stor_title].Runtime);
poster_img.find('#imdb_awards').html(movie_db[stor_title].Awards.replace('Another ', '<br />Another '));
poster_img.find('#imdb_genre').html(movie_db[stor_title].Genre);
poster_img.find('#imdb_actors').html(movie_db[stor_title].Actors);
poster_img.find('#imdb_director').html(movie_db[stor_title].Director);
poster_img.find('#imdb_writer').html(movie_db[stor_title].Writer);
poster_img.find('#imdb_plot').html(movie_db[stor_title].Plot);
poster_img.css({
left: $(window).width()*2/3 - poster_img.width()/2, //e.pageX + 100,
top: $(window).height()/2 - poster_img.height()/2
});
//poster_img.attr('stor_title','Actors: ' + movie_db[stor_title].Actors + ' - Director: ' + movie_db[stor_title].Director)
poster_img.stop(true, true).show();
});
$('a', dl_element).first().on('mouseout', function(e){
poster_img.stop(true, true).fadeOut(2000);
});
//$('b', this).attr('style','font-size:65%;')
var rating = parseFloat(movie_db[stor_title].imdbRating);//alert(rating);
var votes = parseFloat(movie_db[stor_title].imdbVotes.replace(',',''));
if (rating >= 7.5) { el = '<b>'+el+'</b>'; }
$('dt', dl_element).prepend(el+ ' ');
if(rating <= 5.0 || votes <= 1000){
$('dt', dl_element).css({opacity: Math.max(0.15, Math.min(rating/10, votes/1000/2))});
}else if(movie_db[stor_title].imdbRating == "N/A" || movie_db[stor_title].imdbVotes == "N/A"){
$('dt', dl_element).css({opacity: 0.15});
}
};
var getImdbInfo = function(title, year, dl_element) {
var url = 'http://www.omdbapi.com/?t=' + encodeURIComponent(title) + '&y=' + encodeURIComponent(year) + '&plot=full&r=json';
var stor_title = ( title + '_' + year );
//alert("\""+title + "\""+year);
//alert(url);
if ( stor_title in movie_db && movie_db[stor_title]!==false) {
updateElement_dl(stor_title, dl_element);
return true;
}else{
GM_xmlhttpRequest({
method: 'GET',
url: url,
onload: function(response) {
var data = JSON.parse(response.responseText);
if (data.Response === 'False') {
if((title+" ").indexOf("s ")-(title+" ").indexOf("'s ") > 1){
return getImdbInfo((title+" ").replace("s ", "'s "), year, dl_element);
}else{
movie_db[stor_title] = false;
updateElement_dl(stor_title, dl_element);
count++;
}
} else {
movie_db[stor_title] = data;
updateElement_dl(stor_title, dl_element);
return true;
}
//alert(title);
localStorage.setItem('movie_db', JSON.stringify(movie_db));
},
onerror: function(){
console.warn('request failed: http://www.omdbapi.com/?t=' + title);
}
});
if (movie_db[stor_title]===false){
return false;
}
//else{
// return true;
//}
}
};
$(document).ready(function() {
$('dl').each(function() {
if ( ( this.innerHTML.toLowerCase().indexOf('xxx') + this.innerHTML.toLowerCase().indexOf('porn') ) > -1 ) {
//this.hide()
this.outerHTML = '';
} else {
var hash = /[a-zA-Z0-9]{40}/.exec( $('a', this).attr('href') );
//alert(hash);
//hash = hash1;
//hash = hash.substring(hash.length-40, 40);
if(hash){
var trackers = '';
var elem = '<div style="float:left; margin-left:1px; margin-top:-3px; opacity:0.3; font-size:50%; display: inline-block;">';
elem += '<a href="magnet:?xt=urn:'+hash+'" style="display: inline-block;background-color:#FFB090; width:10px; height:10px; margin:1px; text-align:center;">m</a> ';
elem += '<a href="http://torcache.net/torrent/'+hash+'.torrent" style="display: inline-block;background-color:#748DAB; width:10px; height:10px; margin:1px; text-align:center;">t1</a> ';
elem += '<a href="http://torrage.com/torrent/'+hash+'.torrent" style="display: inline-block;background-color:#748DAB; width:10px; height:10px; margin:1px; text-align:center;">t1</a> ';
elem += '<a href="https://zoink.it/torrent/'+hash+'.torrent" style="display: inline-block;background-color:#748DAB; width:10px; height:10px; margin:1px; text-align:center;">t1</a> ';
//elem += '<a href="http://torrentproject.se/torrent/'+hash+'.torrent" style="display: inline-block;background-color:#748DAB; width:10px; height:10px; margin:1px; text-align:center;">m</a> ';
elem += '</div>';
//elem.appendTo($('dd', this));
$('dd', this).append(elem);
//$(this).append(elem);
//alert(hash);
}
}
});
});
start_button.click(function() {
//$('body').find('iframe').hide();//.outerHTML='';
$(this).hide();
poster_img = $('<table style="position: fixed; width:475px; height:283px; background-color:white; border:2px solid black; border-collapse: collapse; border-spacing:0px; cell-spacing:0px;"><tr>' +
'<td><a href="" target="_blank" title="" id="imdb_a" style="display:flex;"><img width="200" height="283" border="0"></a></td>' +
'<td style="border:1px solid black;"><div style="text-align:left; padding:3px; font-size:10pt; font-family:Tahoma; height:277px; overflow:auto;">' +
' <div style="text-align:center; font-size:125%pt; font-weight:bold;"><span id="imdb_title">The Martian</span> (<span id="imdb_year">2015</span>)</div>' +
' <u>Rating</u>: <span id="imdb_rating">8.1</span> - <span id="imdb_votes">275,300</span> votes' +
' <br /><u>Genre</u>: <span id="imdb_genre">Adventure, Comedy, Drama</span>' +
' <br /><u>Rated</u>: <span id="imdb_rated">PG-13</span>, <u>Runtime</u>: <span id="imdb_runtime">144 min</span>' +
' <br /><u>Awards</u>: <span id="imdb_awards"></span>' +
' <br /><u>Actors</u>: <span id="imdb_actors">Matt Damon, Jessica Chastain, Kristen Wiig, Jeff Daniels</span>' +
' <br /><u>Director</u>: <span id="imdb_director">Ridley Scott</span>' +
//' <br /><u>Writer</u>: <span id="imdb_writer">Drew Goddard (screenplay), Andy Weir (book)</span>' +
//' <br /><u>Country</u>: <span id="country">USA, UK</span>' +
' <br /><u>Plot</u>: <span id="imdb_plot">During a manned mission to Mars, Astronaut Mark Watney is presumed dead after a fierce storm and left behind by his crew. But Watney has survived and finds himself stranded and alone on the hostile planet. With only meager supplies, he must draw upon his ingenuity, wit and spirit to subsist and find a way to signal to Earth that he is alive.</span>' +
' </div></td>' +
'</tr></table>');
poster_img.on('mouseover', function(e){ poster_img.stop(true, true).show(); });
poster_img.on('mouseout', function(e){ poster_img.stop(true, true).fadeOut(2000); });
poster_img.hide();
poster_img.appendTo('body');
$('dl').each(function() {
var title = $('a', this).text();
title = title.replace('1080p', '');
title = title.replace('720p', '');
var year = '';
match = reM.exec(title);
if(match >= 1900){
year = match;
title = title.substr(0, title.search(reM)).trim();
}else{
match = reS.exec(title);
if(match){
year = '-';
title = title.substr(0, title.search(reS)).trim();
}
}
//alert(title+':'+year);
if (match){
if(match.length && count < 40) { // count increased by ajax call failures
getImdbInfo(title, year, this); // calls "updateElement_dl" from inside
} else if (match.length) {
title = title.substr(0, title.search(re));
var nel = '<a href="http://www.imdb.com/find?ref_=nv_sr_fn&q=' + title + '&s=all" target="_blank">??</a>';
$('dt', this).prepend(nel+ ' ');
}
} else {
//alert('aaa');
$('a', this).css('color','#777');
}
});
});
} catch (e) {
unsafeWindow.console.log(e);
}