// ==UserScript== // @name TV Today Enhancer // @namespace https://github.com/Ede123/userscripts // @version 1.0 // @description Buttons for a quick Google / Wikipedia / IMDb and Rotten Tomatoes search. IMDb and Rotten Tomatoes ratings. // @icon https://raw.githubusercontent.com/Ede123/userscripts/master/icons/TV_Today.png // @author Eduard Braun // @license GPL-3.0-or-later; https://www.gnu.org/licenses/gpl-3.0.txt // @include http://www.tvtoday.de/programm/* // @grant GM_xmlhttpRequest // ==/UserScript== (function () { "use strict"; // link to program detail pages by default var links = document.getElementsByTagName('a'); for (var i = 0; i < links.length; i++) { links[i].href = links[i].href.replace("format=sendung","format=detail"); } // only continue on program detail pages if(!window.location.href.match("format=detail")) { return; } // get German title and original title (might be identical) var title,otitle; getMovieTitle(); // add links to movie addLinks(); // get movie data asynchronously GM_xmlhttpRequest({ method: "GET", url: "http://www.omdbapi.com/?tomatoes=true&t=" + otitle, onload: function(response) { // Response to JSON var omdbData = response.responseText; var omdbJSON = JSON.parse(omdbData); //alert("Titel: " + omdbJSON.Title + " (" + omdbJSON.Year + ")\n" + // "IMDb: " + omdbJSON.imdbRating + "\n" + // "Rotten Tomatoes: " + omdbJSON.tomatoUserRating + " (" + omdbJSON.tomatoUserMeter + "%)"); addRatings(omdbJSON); } }); // get movie title function getMovieTitle() { var mainInfos = document.getElementsByClassName('mainInfos')[0]; title = mainInfos.childNodes[1].innerHTML.trim(); var cast = document.getElementsByClassName('cast')[0]; if (cast.childNodes[1] && cast.childNodes[1].innerHTML === "O:") { otitle = cast.childNodes[2].data; var otitle_RegExp = /(.+), .+?;/; otitle = otitle_RegExp.exec(otitle)[1].trim(); } otitle = otitle || title; title = title.replace(/'/g, "\'"); otitle = otitle.replace(/'/g, "\'"); //alert("Titel: " + title + "\n" + "Originaltitel: " + otitle) } // add movie links to page function addLinks() { // create movie links var google = createLink("google", "https://www.google.de/search?q=" + title, "https://www.google.de/favicon.ico"); var wiki = createLink("wiki", "https://de.wikipedia.org/w/index.php?search=" + title, "https://de.wikipedia.org/favicon.ico"); var imdb = createLink("imdb", "http://www.imdb.com/find?s=tt&q=" + otitle.replace(/'/g, "'"), "http://www.imdb.com/favicon.ico"); var rotten = createLink("rotten", "http://www.rottentomatoes.com/search/?search=" + escape(otitle), "http://www.rottentomatoes.com/favicon.ico"); // create container for customizations var div = document.createElement('div'); div.id = "myRatings"; div.style.padding = ".5em"; div.style.marginBottom = "1em"; div.style.background = "url('/_imgToday/program/popup/hg-tagestippbewertung.gif') repeat scroll 0% 0% transparent"; div.style.borderTop = "2px solid red"; var spacer = document.createElement('span'); spacer.style.padding = ".5em"; spacer.innerHTML = "|"; div.appendChild(google); div.appendChild(spacer.cloneNode(true)); div.appendChild(wiki); div.appendChild(spacer.cloneNode(true)); div.appendChild(imdb); div.appendChild(spacer.cloneNode(true)); div.appendChild(rotten); // remove unneccessary "tweet" div document.getElementsByClassName('tweet')[0].remove(); // add custom ratings var detail = document.getElementsByClassName('detail')[0]; detail.insertBefore(div, detail.firstChild); } // create a new movie link with icon function createLink(id,link,icon) { var newLink = document.createElement('span'); newLink.id = id; newLink.innerHTML = "" + "" + ""; return newLink; } // add movie ratings and title received from OMDb API to page function addRatings(omdbJSON) { if(omdbJSON && omdbJSON.Title) { var omdbtitle = []; var ratingIMDB = []; var ratingRotten = []; // parse title and ratings from omdb data omdbtitle = omdbJSON.Title + " (" + omdbJSON.Year + ")"; ratingIMDB = omdbJSON.imdbRating.replace("N/A","–") + "/10"; ratingRotten = omdbJSON.tomatoUserRating.replace("N/A","–") + "/5 (" + omdbJSON.tomatoUserMeter.replace("N/A","–") + "%)"; ratingIMDB = '' + ratingIMDB + ''; ratingRotten = '' + ratingRotten + ''; // add title var title_div = document.createElement('div'); title_div.innerHTML = omdbtitle; title_div.style.marginBottom = "0.3em"; var myRatings = document.getElementById('myRatings'); myRatings.insertBefore(title_div, myRatings.firstChild); // add ratings document.getElementById("imdb").innerHTML += " " + ratingIMDB; document.getElementById("rotten").innerHTML += " " + ratingRotten; } } }());