Programma gemist directe video link

By Jasper de Vries Last update Jul 15, 2007 — Installed 4,079 times.
// ==UserScript==
// @name         Programma gemist directe video link
// @namespace    http://browservulsel.blogspot.com/
// @description  v0.7 - Uitzendinggemist.nl, rtl4.nl, rtl5.nl, rtl7.nl directe link naar breedband video's
// @include      http://*uitzendinggemist.nl/*
// @include      http://*omroep.nl/*
// @include      http://www.rtl.nl/*
// @include      http://*tvopjepc.nl/*
// @include      http://*rvu.nl/*
// @include      http://*bnn.nl/*
// @include      http://*delamas.nl/*
// @include      http://*vara.nl/*
// ==/UserScript==

/*

	Author: Jasper de Vries, jepsar@gmail.com
	Date:   2007-03-17

*/

var omroepAsf = /http:\/\/cgi\.omroep\.nl\/cgi-bin\/streams\?\/(\w+\/)+bb\.[\w\.]+\.asf/;
var omroepPlayer  = /http:\/\/player\.omroep\.nl\/\?aflID=[0-9]+(&start=[0-9:]+)?&md5=[0-9a-z]+|http:\/\/portal\.omroep\.nl\/mplayer\?nav=[A-Za-z]+/;
var rtlAsf = /\(channel=[^,]+,progid=[^,]+,(zone=[^,]+,)?vm=[\/a-z0-9\._]+,ord='\+rnd\+'\)[\/a-z0-9\._]+(805|796)\.wvx/i;

GM_addStyle(".GM-video { position: absolute; left: -9999px; top: -9999px; }");

// RTL video's zoeken
if (document.location.host == "www.rtl.nl") {
	for (var i = 0, a; a = document.links[i]; i++) {
		if (handleRtlPlayer(a)) continue;
	}
}
// Omroep video's zoeken
else {
	for (var i = 0, a; a = document.links[i]; i++) {
		if (handleOmroepVideo(a, "href", omroepAsf)) continue;
		if (handleOmroepVideo(a, "onclick", omroepAsf)) continue;
		if (handleOmroepPlayer(a, "href")) continue;
		if (handleOmroepPlayer(a, "onclick")) continue;
	}
}

// Attributen met omroepvideo-url's afhandelen
function handleOmroepVideo(a, attr, videoExp) {
	if (a.hasAttribute(attr) && a.getAttribute(attr).match(videoExp)) {
		a.setAttribute("href", videoExp.exec(a.getAttribute(attr))[0]);
		a.removeAttribute("onclick");
		a.removeAttribute("target");
		return true;
	}
	else return false;
}

// Attributen met een link naar de omroep-player afhandelen
function handleOmroepPlayer(a, attr) {
	if (a.hasAttribute(attr) && a.getAttribute(attr).match(omroepPlayer)) {
		a.setAttribute("href", omroepPlayer.exec(a.getAttribute(attr))[0]);
		a.setAttribute("onclick", "return false");
		a.removeAttribute("target");
		a.addEventListener("click", omroepClickHandler, false);
		return true;
	}
	else return false;
}

// Probeer via omroep-player-url de video-url te achterhalen
function omroepClickHandler(evt) {
	var videoXml = evt.currentTarget.href.toString();
	videoXml = videoXml.replace(/^[^\?]+/, "http://player.omroep.nl/xml/metaplayer.xml.php");
	videoXml += "&md5=TODO";
	loadOmroepPlayer(videoXml);
}
function loadOmroepPlayer(mplayerUrl) {
	GM_xmlhttpRequest({
			method : "GET",
			url : mplayerUrl,
			headers : { "User-Agent":"monkeyagent", "Accept":"text/monkey,text/xml",
		},

		onload : function(s) {
			if (s.responseText.match(omroepAsf)) {
				startVideo(omroepAsf.exec(s.responseText));
			}
			else self.location.href = mplayerUrl;
		}
	});
}

// RTL-player links afhandelen
function handleRtlPlayer(a) {
	if (a.hasAttribute("onclick") && a.getAttribute("onclick").match(/\/system\/video\//)) {
		var playerUrl = a.getAttribute("onclick").replace(/^[^']+'/, "").replace(/','video'.*$/, "");
		a.setAttribute("href", playerUrl);
		a.setAttribute("onclick", "return false");
		a.removeAttribute("target");
		a.addEventListener("click", rtlClickHandler, false);
		return true;
	}
	else return false;
}

// Probeer via omroep-player-url de video-url te achterhalen
function rtlClickHandler(evt) {
	loadRtlPlayer(evt.currentTarget.href.toString());
}
function loadRtlPlayer(mplayerUrl) {
	GM_xmlhttpRequest({
			method : "GET",
			url : mplayerUrl,
			headers : { "User-Agent":"monkeyagent", "Accept":"text/monkey,text/xml",
		},

		onload : function(s) {
			if (s.responseText.match(rtlAsf)) {
				var asfUrl = rtlAsf.exec(s.responseText)[0];
				asfUrl = asfUrl.replace(/'\+rnd\+'/, new Date().getTime());
				asfUrl = "http://www.rtl.nl/" + asfUrl.replace(/^[^\(]+/, "(");
				startVideo(asfUrl);
			}
			else self.location.href = mplayerUrl;
		}
	});
}

if (document.location.host == "www.rtl.nl") {
	unsafeWindow.startMovie = function(movie) {
		if(movie == null || (movie == unsafeWindow.initialItem && !unsafeWindow.openInFileBrowser)){ return;}

		var new_movie = movie.getAttribute("rel");
		var new_movie_prestate = movie.parentNode.parentNode.getAttribute("rel").replace("videomenu.xml", "");

		loadRtlPlayer("http://www.rtl.nl/(vm=" + new_movie_prestate + ")/system/video/html" + new_movie);
	}
}

// Start video zonder wit scherm achter te laten
function startVideo(url) {
	var iframe = document.createElement("iframe");
	iframe.src = url;
	iframe.className = "GM-video";
	document.body.appendChild(iframe);
}

// Lama popup overrulen
if (self.location.hostname.match(/^lama\.bnn\.nl|(www\.)?delamas\.nl$/)) {
	unsafeWindow.openEmbeddedPlayer = function(soort, url) {
		self.location.href = "http://cgi.omroep.nl/cgi-bin/streams?/tv/bnn/"+ url;
	}
}

// Deze week vink voor uitzendinggemist.nl
if (self.location.href.match(/uitzendinggemist\.nl\/index\.php\/selectie/)) {
	if (markOldProgramms()) buildThisWeekUI();
}

function buildThisWeekUI() {
	var sortDiv = document.evaluate("//table[@id='content_table']//td[3]/div/table//div", document, null, 0, null);
	if (sortDiv) {
		sortDiv = sortDiv.iterateNext();
		var label = document.createElement("label");
		label.id = "GM-deze-week";

		var checkbox = document.createElement("input");
		checkbox.type = "checkbox";
		checkbox.checked = GM_getValue("thisWeekOnly", true);
		checkbox.addEventListener("click", passThisWeekClick, false);
		handleThisWeekClick(checkbox);

		label.appendChild(checkbox);
		label.appendChild(document.createTextNode("deze week"));
		GM_addStyle("#GM-deze-week { margin-left: 0px; cursor: pointer; white-space: nowrap; }");
		GM_addStyle("#GM-deze-week input { width: 12px; height: 12px; margin-right: 4px; }");
		sortDiv.appendChild(label);

		return true;
	}
	else return false;
}

function markOldProgramms() {
	var now = new Date();
	var progTable = document.getElementById("tooltip_selectie");
	if (progTable) {
		progTable = progTable.parentNode;
		var row, splittedDate, td, progDate;
		var weekMSec = 1000 * 60 * 60 * 24 * 7;
		for (var i = progTable.rows.length - 1; i > 0; i--) {
			row = progTable.rows[i];
			td = row.getElementsByTagName("td")[2];
			splittedDate = td.textContent.split("-");
			progDate = new Date(splittedDate[2], splittedDate[1] - 1, splittedDate[0]);
			if (now - progDate > weekMSec) row.className += " old";
		}
		return true;
	}
	else return false;
}

function passThisWeekClick(event) {
	handleThisWeekClick(event.currentTarget);
}

function handleThisWeekClick(checkbox) {
	GM_setValue("thisWeekOnly", checkbox.checked);
	if (checkbox.checked) GM_addStyle("tr.old { display: none; }");
	else GM_addStyle("tr.old { display: table-row; }");
}