NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==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 <eduard.braun2@gmx.de>
// @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 = "<a target='_blank' href='" + link + "'>" +
"<img src='" + icon + "' width='16' height='16' style='vertical-align:bottom'/>" +
"</a>";
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 = '<a href="http://www.imdb.com/title/' + omdbJSON.imdbID + '">' + ratingIMDB + '</a>';
ratingRotten = '<a href="http://www.rottentomatoes.com/alias?type=imdbid&s=' + omdbJSON.imdbID.substr(2) + '">' + ratingRotten + '</a>';
// 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;
}
}
}());