// ==UserScript== // @name IMDB info + .torrent from magnet // @version 1.20161222 // @description Show info of movie/series (rating, poster, actors, ...) from IMDB on almost any torrent domain (thepiratebay, *torrent* , ...) // @namespace hossam6236 // @author hossam6236 // @license GNU General Public License v3.0 // @include http*://*torrent*.*/* // @include http*://*piratebay*.*/* // @include http*://*isohunt*.*/* // @include http*://*1337x*.*/* // @include http*://*rarbg*.*/* // @include http*://*zooqle*.*/* // @include http*://*bitsnoop*.*/* // @include http*://*dnoid*.*/* // @include http*://*torlock*.*/* // @include http*://*eztv*.*/* // @include http*://*idope*.*/* // @include http*://*toorgle*.*/* // @include http*://*demonoid*.*/* // @include http*://*kickass*.*/* // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js // @grant GM_xmlhttpRequest // @connect imdb.com // @connect omdbapi.com // @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; function toTitleCase(str){ return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); } 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()); $('body').prepend(start_button); //start_button.insertAfter($('h1').first()); //start_button.prependTo($('body')); 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 + ''; var rating = parseFloat(movie_db[stor_title].imdbRating);//alert(rating); var votes = parseFloat(movie_db[stor_title].imdbVotes.replace(',','')); if (rating >= 7.5 || votes>50000) { el = ''+el+''; } var opac = 1.0; if(rating <= 5.0 || votes <= 1000) { opac = Math.max(0.15, Math.min(rating/10, votes/1000)); } else if(movie_db[stor_title].imdbRating == "N/A" || movie_db[stor_title].imdbVotes == "N/A"){ opac = 0.15; } $(dl_element).each(function(){ $(this).find('#loading').hide(); $(this).css({opacity: opac}); var theElement_a = $(this).find('a').first(); $(el+ ' ').insertBefore(theElement_a); theElement_a.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(); }); theElement_a.first().on('mouseout', function(e){ poster_img.stop(true, true).fadeOut(2000); //poster_img.find('img').attr('src', ''); }); }); }; 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('#titleOverview').find('iframe').first().attr('src'); 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 url2 = 'http://www.omdbapi.com/?t=' + encodeURIComponent(title) + '&y=' + encodeURIComponent(year) + '&plot=full&r=json'; GM_xmlhttpRequest({ method: 'GET', url: url2, 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: ' + url2); } }); } //if (movie_db[stor_title]===false){ //$('#loading', dl_element).hide(); //return false; //} //else{ // return true; //} } }; $(document).ready(function() { $('a').each(function() { var href = $(this).attr("href"); var torrentz = /^\/([a-zA-Z0-9]{40})/i.exec(href); var piratebay = /^\/torrent\/([0-9])/i.exec(href); var hash = (/(^\/|^magnet\:\?xt\=urn\:btih\:)([a-zA-Z0-9]{40})/i.exec( $(this).attr('href') )); //alert(href); if ( ( this.innerHTML.toLowerCase().indexOf('xxx') + this.innerHTML.toLowerCase().indexOf('porn') ) > -1 ) { //this.hide() this.outerHTML = ''; //} else { } //if( torrentz || piratebay ){ //alert($('a', this).attr('href')); var name = $(this).text(); if(hash){ hash = hash[2].toUpperCase(); /////////////////////////////////////////////////////// Loading Magnet from piratebay //alert(hash); //
...... ... var elem = ' Load '; //elem += 'M '; //elem += '.T '; elem += 't1 '; //elem += 't1 '; elem += 't1 '; //elem += 't1 '; elem += 'm '; elem += ''; //$(elem).appendTo($('dt', this)); //$('dl', this).append($(elem)); $(elem).insertAfter($(this)); $(this).on('mouseover', function(e){ $(this).next('.download-links').stop(true, true).show(); }); $(this).on('mouseout', function(e){ $(this).next('.download-links').hide('slow'); }); $(this).next('.download-links').on('mouseover', function(e){ $(this).stop(true, true).show(); }); $(this).next('.download-links').on('mouseout', function(e){ $(this).hide('slow'); }); /* var trackers = ''; var magnet_full = $('#magnet_full', $(this).parent()); magnet_full.on('click', function() { //alert('hereeee'); 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 = 'http://torrentz.eu'+'/'+hash; //alert(url); ///* $(this).text('...'); GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(response) { var announcelist = /href="([^a]announcelist_[^"]*)"/igm.exec(response.responseText); //alert(url+announcelist + response.responseText); if(announcelist){ 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); } }); }else{ $(magnet_full).text('ERROR'); } }, 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'); $('a').each(function() { var href = $(this).attr("href"); // // var torrentz = /^\/([a-zA-Z0-9]{40})/i.exec(href); // // var piratebay = /^\/torrent\/([0-9])/i.exec(href); //alert(href); // // if( torrentz || piratebay ){ //alert(href); var title = $(this).text().toLowerCase().replace(',', ' ').replace('.', ' ').replace('(', ' ').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).parent().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 = '??'; $(this).parent().prepend(nel+ ' '); } } else { //alert('aaa'); $('a', this).css('color','#777'); } // // } }); var movies_in_page = $('
'); $.each(movie_loading, function( index, value ) { $('').appendTo(movies_in_page); }); movies_in_page.insertAfter(start_button); $.each(movie_loading, function( index, value ) { getImdbInfo(value[0], value[1]); // calls "updateElement_dl" from inside }); //movies_in_page.css({width: movies_in_page.parent().width()/2}); //movies_in_page.css({height: movies_in_page.parent().height()>0 ? movies_in_page.parents('div').height() : movies_in_page.parents('div').height()}); //movies_in_page.css({ // left: $(window).width()*2/3 - movies_in_page.width()/2, //e.clientX+20,// // top: $(window).height()/2 - movies_in_page.height()/2 //e.clientY// //}); }); var classFromTitle = function(title) { return title.trim().replace(/[^a-zA-Z0-9]/g,'-'); }; } catch (e) { unsafeWindow.console.log(e); }