// ==UserScript== // @name TorrentZ [load IMDB info] // @namespace // @version 1.07 // @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.*/* // @include https://www.torrentz.*/* // @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 // @downloadURL none // ==/UserScript== // regext for cleaning the titles var reM = /[0-9]{4}/i; var reS = /S[0-9]{2}E[0-9]{2}|[0-9]{1}x[0-9]{2}/i; var from_imdb = false; var live = false; full_magnets = {} movie_db = {}; movie_loading = {}; try { var c = localStorage.getItem('movie_db'); if (c) { $.extend(movie_db, JSON.parse(c)); } var c = localStorage.getItem('full_magnets'); if (c) { $.extend(full_magnets, JSON.parse(c)); } var count = 0; start_button = $('
| | (clear cache)
'); //start_button.appendTo($('h1').first()); // start_button.appendTo($('h1').first()); start_button.insertAfter($('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){ var dl_element = '.'+stor_title; if (movie_db[stor_title]==false) { $('a', dl_element).css('color','#777'); return true; } //alert(stor_title); var awards_text = $(''+movie_db[stor_title].Awards+'').text(); //awards_text = awards_text ? awards_text : 'N/A'; var el_title = movie_db[stor_title].imdbVotes + ' votes - ' + movie_db[stor_title].Runtime + ' - Rated ' + $(''+movie_db[stor_title].Rated+'').text() + ' - Awards: ' + awards_text; 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(awards_text.toLowerCase()); if(wins) wins = parseFloat(wins[1]); var noms = reg_noms.exec(awards_text.toLowerCase()); if(noms) noms = parseFloat(noms[1]); var wins_sig = reg_wins_sig.exec(awards_text.toLowerCase()); if(wins_sig) wins_sig = parseFloat(wins_sig[1]); var noms_sig = reg_noms_sig.exec(awards_text.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 = ''; }else if(wins >= 10 || (noms_sig >= 1 && noms >= 5)){ star = ''; }else if(wins >= 5 || noms >= 10 || noms_sig >= 1){ star = '★'; }else if(wins + noms >= 1){ star = '☆'; } var el = '' + movie_db[stor_title].imdbRating + star + ''; //$('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(' ('+movie_db[stor_title].Genre + ')'); $(dl_element).each(function(){ $(this).find('a').first().on('mouseover', function(e){ poster_img.find('img').attr('src', 'http://ia.media-imdb.com/images/G/01/imdb/images/nopicture/large/film-184890147._CB379391879_.png'); if (movie_db[stor_title].Poster){ 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 ', '
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); //alert(1); if (movie_db[stor_title].Trailer) { poster_img.find('#imdb_trailer').show(); poster_img.find('#imdb_trailer').find('a').attr('href', movie_db[stor_title].Trailer); poster_img.find('#imdb_trailer').find('a').attr('onclick', "javascript:window.open('" + movie_db[stor_title].Trailer + "', '', 'width=600, height=338'); return false;"); //poster_img.find('#imdb_trailer').find('iframe').prop('src',movie_db[stor_title].Trailer); //alert(2); }else{ poster_img.find('#imdb_trailer').hide(); //alert(3); } poster_img.css({ left: $(window).width()*2/3 - poster_img.width()/2, //e.clientX+20,// top: $(window).height()/2 - poster_img.height()/2 //e.clientY// }); //poster_img.attr('stor_title','Actors: ' + movie_db[stor_title].Actors + ' - Director: ' + movie_db[stor_title].Director) poster_img.stop(true, true).show(); }); $(this).find('a').first().on('mouseout', function(e){ poster_img.stop(true, true).fadeOut(2000); //poster_img.find('img').attr('src', ''); }); }); //$('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 = ''+el+''; } $('dt', dl_element).prepend(el+ ' '); if(rating <= 5.0 || votes <= 1000){ $(dl_element).each(function(){$(this).find('dt').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"){ $(dl_element).each(function(){$(this).find('dt').css({opacity: 0.15})}); } $(dl_element).each(function(){$(this).find('#loading').hide()}); }; var getImdbInfo = function(title, year) { var stor_title = classFromTitle( title + '_' + year + '_' + from_imdb ); var dl_element = $('.'+stor_title); //alert($('.'+stor_title).length); //$(' (Loading) ').insertBefore($('a', dl_element).first()); $(dl_element).each(function(){ $(' (Loading) ').insertBefore($(this).find('a').first()); }); //alert("\""+title + "\""+year); //alert(url); if ( !live && stor_title in movie_db && movie_db[stor_title]!==false ) { updateElement_dl(stor_title); return true; }else{ if (from_imdb){ var url = 'http://www.imdb.com/xml/find?json=1&nr=1&tt=on&q=' + encodeURIComponent(title /*+ ' (' + year + ')'*/); $('#loading', dl_element).text('Loading1'); GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(response) { //alert(title + ' (' + year + ')' + ':' + response.responseText); var resp = JSON.parse(response.responseText); var results = []; var data = []; if(resp['title_popular']){ results = $.merge(results, resp['title_popular']); } if(resp['title_exact']){ results = $.merge(results, resp['title_exact']); } if(resp['title_approx']){ results = $.merge(results, resp['title_approx']); } if(reM.exec(year)){ $.each(results, function(index, item){ if(item['title_description'].indexOf(year)>-1){ data = $.merge(data, [item]); //break; } }); results = data; }else{ $.each(results, function(index, item){ if(item['title_description'].toLowerCase().indexOf('series')>-1){ data = $.merge(data, [item]); //break; } }); results = data; } data = 0; //alert(JSON.stringify(results)); $.each(results, function(index, item){ if(data===0 && item['title']==title){ data = item; //break; } }); if(data===0){ data = results[0]; } //alert(title + ' (' + year + ')' + ':' + JSON.stringify(resp['title_approx'])); if (data){ var movie_imdb = {}; movie_imdb['imdbID'] = data['id']; movie_imdb['Title'] = ''+data['title']+''; //if(movie_imdb['Title'] == 'Babysitting 2'){ alert(); } //movie_imdb['Year'] = /\d{4}/.exec(data['title_description']); movie_imdb['Year'] = movie_imdb['Year'][0] //movie_imdb['Director'] = $(data['title_description'].replace(movie_imdb['Year']+',', '')).text(); movie_imdb['Year'] = /[0-9]{4}/.exec(data['title_description']); movie_imdb['Year'] = movie_imdb['Year'][0] //movie_imdb['Director'] = $(data['title_description'].substring(data['title_description'].indexOf(',')+1, data['title_description'].length)).text(); var url2 = 'http://m.imdb.com/title/' + movie_imdb['imdbID'] + '/'; $('#loading', dl_element).text('Loading2'); GM_xmlhttpRequest({ method: 'GET', url: url2, onload: function(response2) { //if(movie_imdb['Title'] == 'The Intern'){ alert(url2+': '+JSON.stringify(movie_imdb)); } var resp2 = response2.responseText.replace(/([\S\s]*?)<\/script>/igm,''); resp2 = resp2.replace(/([\S\s]*?)<\/style>/igm,''); //$('body').append('
aaaaaaaaaa ' + /]*>/.exec(response2.responseText) + '
' ) ); var poster_match = '
' + /]* Poster[^>]*?>/im.exec(resp2) + '
'; // alert(poster_match); //movie_imdb['Plot'] = poster_match; resp2 = $(resp2.replace(/]*>/igm,""));//.replace('="http:', '="httpX')); //alert(title + ' (' + year + ')' + ':' + movie_imdb['imdbID'] + ':\n' + resp2); //movie_imdb['Poster'] = resp2.find('div.media').first().find('img[itemprop="image"]').first().attr('data-src-x2'); movie_imdb['Poster'] = $(poster_match).find('img.media-object[itemprop="image"]').first().attr('data-src-x2'); //alert(movie_imdb['Poster']); //movie_imdb['Poster'] = /data-src-x2="([^"]*)"/igm.exec(/]*Poster[^>]*>/igm.exec(response2.responseText)); if(movie_imdb['Poster']) movie_imdb['Poster'] = movie_imdb['Poster'][1]; //alert(movie_imdb['Poster']); movie_imdb['Plot'] = resp2.find('p[itemprop="description"]').first().text().trim(); movie_imdb['Trailer'] = resp2.find('a.video-link').first().attr('href'); movie_imdb['Trailer'] = (movie_imdb['Trailer'] && typeof movie_imdb['Trailer'] == 'string') ? 'https://m.imdb.com' + movie_imdb['Trailer'] : ''; movie_imdb['imdbRating'] = resp2.find('#ratings-bar').first().find('div').first().text() + ''; if(movie_imdb['imdbRating']) movie_imdb['imdbRating'] = movie_imdb['imdbRating'].trim(); movie_imdb['imdbVotes'] = /\/10([0-9,]+)/.exec(movie_imdb['imdbRating']); movie_imdb['imdbVotes'] = movie_imdb['imdbVotes'] ? (movie_imdb['imdbVotes'][1]) : ''; if(movie_imdb['imdbVotes'].length==0) movie_imdb['imdbVotes'] = 'N/A'; movie_imdb['imdbRating'] = /([0-9.]+)\/10/.exec(movie_imdb['imdbRating']); movie_imdb['imdbRating'] = movie_imdb['imdbRating'] ? (movie_imdb['imdbRating'][1]) : ''; if(movie_imdb['imdbRating'].length==1) movie_imdb['imdbRating'] = movie_imdb['imdbRating'] + '.0'; if(movie_imdb['imdbRating'].length==0) movie_imdb['imdbRating'] = 'N/A'; movie_imdb['Rated'] = resp2.find('p.infobar').first().find('meta[itemprop="contentRating"]').first().attr('content'); movie_imdb['Rated'] = movie_imdb['Rated'] ? ''+movie_imdb['Rated'].trim()+'' : 'N/A'; movie_imdb['Director'] = resp2.find('a[itemprop="director"]').first().find('[itemprop="name"]').first().text().trim(); var tmp_hrefDir = resp2.find('a[itemprop="director"]').first().attr('href'); //.replace('m.imdb.com', 'www.imdb.com') movie_imdb['Director'] = tmp_hrefDir ? ''+movie_imdb['Director']+'' : movie_imdb['Director']; movie_imdb['Runtime'] = resp2.find('p.infobar').first().find('time[itemprop="duration"]').first().text() + ''; movie_imdb['Runtime'] = movie_imdb['Runtime'] ? (movie_imdb['Runtime'].trim()) : ''; tmp = []; resp2.find('p.infobar').first().find('span[itemprop="genre"]').each(function(){ tmp = $.merge(tmp, [$(this).text().trim()]); }); movie_imdb['Genre'] = tmp.join(', ').trim(); tmp = []; resp2.find('#awards').first().find('span[itemprop="awards"]').each(function(){ tmp = $.merge(tmp, [$(this).text().trim().replace('\n', ' ').replace("\n", ' ')]); }); movie_imdb['Awards'] = tmp.join(' ').trim(); movie_imdb['Awards'] = movie_imdb['Awards'] ? ''+movie_imdb['Awards'].trim()+'' : 'N/A'; tmp = []; resp2.find('div#cast-and-crew').first().find('a').slice(0,4).each(function(){ if($(this).first('strong').text().trim().length>0) tmp = $.merge(tmp, [''+$(this).first('strong').text().trim()+'']); }); movie_imdb['Actors'] = tmp.join(', ').trim(); //alert(JSON.stringify(movie_imdb)); movie_db[stor_title] = movie_imdb; updateElement_dl(stor_title); localStorage.setItem('movie_db', JSON.stringify(movie_db)); }, onerror: function(e2){ //alert(e2); $('#loading', dl_element).text(' Error2 '); //alert('xxx request failed xxx: ' + JSON.stringify(e2) + ' : ' + url2); console.warn('request failed: ' + url2); } }); }else{ $('#loading', dl_element).text(' NotFound '); } }, onerror: function(e1){ $('#loading', dl_element).text(' Error1 '); //alert('xxx request failed xxx: ' + JSON.stringify(e1) + ' : ' + url); console.warn('request failed: ' + url); } }); } else { var url = 'http://www.omdbapi.com/?t=' + encodeURIComponent(title) + '&y=' + encodeURIComponent(year) + '&plot=full&r=json'; 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); count++; } } else { movie_db[stor_title] = data; updateElement_dl(stor_title); return true; } //alert(title); localStorage.setItem('movie_db', JSON.stringify(movie_db)); }, onerror: function(){ console.warn('request failed: ' + url); } }); } //if (movie_db[stor_title]===false){ //$('#loading', dl_element).hide(); //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 { } if( $(this).parent('.download').length + $(this).parent('.trackers').length == 0) { //alert($('a', this).attr('href')); var hash = (/([a-zA-Z0-9]{40})/i.exec( $('a', this).attr('href') )); var name = $('a', this).text(); if(hash){ hash = hash[0].toUpperCase(); var trackers = ''; //
...... ... var elem = ''; elem += ' Load '; elem += 'M '; elem += '.T '; //elem += 't1 '; //elem += 't1 '; //elem += 't1 '; //elem += 't1 '; //elem += 't1 '; //elem += 'm '; elem += ''; //$(elem).appendTo($('dt', this)); //$('dl', this).append($(elem)); $(elem).insertAfter($('a', this)); var magnet_full = $('#magnet_full', this); $('#magnet_full', this).on('click', function() { if(hash in full_magnets){ $(magnet_full).attr('href', full_magnets[hash]); $(magnet_full).attr('target', '_blank'); $(magnet_full).text('Magnet'); $(magnet_full).off('click'); $(magnet_full).parent().html($('
').append($(magnet_full).clone()).html()); }else{ var url = document.location.origin+'/'+hash; ///* $(this).text('...'); GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(response) { var announcelist = /href="([^a]announcelist_[^"]*)"/igm.exec(response.responseText); var url = document.location.origin+announcelist[1]; //alert(url); GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(response) { var resp = response.responseText; resp = resp.replace(/[\r\n]*/,"\n").trim() var trackers = []; $.each(resp.split("\n"), function(i, v){ if(v && v.length>0) trackers = $.merge(trackers, [encodeURIComponent(v)]); }); trackers = trackers.join('&tr='); //$(magnet_full).text('aaa'); //alert(JSON.stringify(this)); $(magnet_full).attr('href', 'magnet:?xt=urn:btih:'+hash+'&dn='+encodeURIComponent(name)+'&tr='+trackers); $(magnet_full).attr('target', '_blank'); $(magnet_full).text('Magnet'); $(magnet_full).off('click'); $(magnet_full).parent().html($('
').append($(magnet_full).clone()).html()); full_magnets[hash] = 'magnet:?xt=urn:btih:'+hash+'&dn='+encodeURIComponent(name)+'&tr='+trackers; localStorage.setItem('full_magnets', JSON.stringify(full_magnets)); //alert( ); }, onerror: function(){ $(magnet_full).text('Error2'); console.warn('request failed: ' + url); } }); }, onerror: function(){ $(magnet_full).text('Error1'); console.warn('request failed: ' + url); } }); //*/ } }); //$(this).append(elem); //alert(hash); /* $(this).on('mouseover', function(e){ $(this).find('.download-links').show(); }); $(this).on('mouseout', function(e){ $(this).find('.download-links').hide(); }); */ } } }); }); start_button.find('#clear').click(function() { localStorage.removeItem('movie_db'); localStorage.removeItem('full_magnets'); }); start_button.find('#start').click(function() { from_imdb = start_button.find('#from_imdb').is(':checked') live = start_button.find('#live').is(':checked') //$('body').find('iframe').hide();//.outerHTML=''; start_button.hide(); poster_img = $('' + '' + '' + '
' + '
The Martian (2015)
' + ' Trailer - ' + ' Rating: 8.1 - 275,300 votes' + '
Genre: Adventure, Comedy, Drama' + '
Rated: PG-13, Runtime: 144 min' + '
Awards: ' + '
Actors: Matt Damon, Jessica Chastain, Kristen Wiig, Jeff Daniels' + '
Director: Ridley Scott' + //'
Writer: Drew Goddard (screenplay), Andy Weir (book)' + //'
Country: USA, UK' + '
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.' + '
'); poster_img.on('mouseover', function(e){ poster_img.stop(true, true).show(); }); poster_img.on('mouseout', function(e){ poster_img.stop(true, true).fadeOut(1000); }); poster_img.hide(); poster_img.appendTo('body'); $('dl').each(function() { if( $(this).parent('.download').length + $(this).parent('.trackers').length == 0) { var title = $('a', this).text().toLowerCase().replace('1080p', '').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); //alert(title+':'+year); if (match){ if(match.length && count < 40) { // count increased by ajax call failures $(this).addClass(classFromTitle(title+'_'+year+'_'+from_imdb)); movie_loading[classFromTitle(title+'_'+year+'_'+from_imdb)] = [title, year]; } else if (match.length) { title = title.substr(0, title.search(re)); var nel = '??'; $('dt', this).prepend(nel+ ' '); } } else { //alert('aaa'); $('a', this).css('color','#777'); } } }); $.each(movie_loading, function( index, value ) { //alert(value); getImdbInfo(value[0], value[1]); // calls "updateElement_dl" from inside }); }); var classFromTitle = function(title) { return title.trim().replace(/[^a-zA-Z0-9]/g,'-'); }; } catch (e) { unsafeWindow.console.log(e); }