TVNZ OnDemand direct download script v0.5.1

By David Ritchie Last update Aug 11, 2009 — Installed 1,753 times. Daily Installs: 9, 7, 11, 2, 7, 7, 7, 5, 10, 9, 0, 23, 3, 7, 10, 6, 6, 10, 3, 7, 6, 2, 6, 12, 4, 2, 4, 9, 9, 1, 1, 5

There are 6 previous versions of this script.

// ==UserScript==
// @name          TVNZ OnDemand direct download script v0.5.2
// @namespace     http://www.additiverich.com/gm/
// @description   Links directly to flash video (FLV) files on TVNZ's website
// @include       http://tvnz.co.nz/*
// @include       http://tvnzondemand.co.nz/content/*
// ==/UserScript==

var player = document.getElementById("player");
if(player) {
    for(i = 0; i < player.childNodes.length; i++) {
        if(player.childNodes[i].name == "flashvars") {
            vars = player.childNodes[i].value;
        }
    }
}
if(vars) {
  tempList = vars.split("&");
  for (var i=0;i<tempList.length;i++) {
    var pair = tempList[i].split("=");
    if (pair[0] == "playlist") {
      playlistURI = pair[1];
    }
  }
}

if(playlistURI) {
  /* Download SMIL from server */
  GM_xmlhttpRequest({
    method: 'GET',
    url   : 'http://' + document.domain + playlistURI,
    onload : completeRequest
  });
}

function completeRequest(r) {
	var parser = new DOMParser();
	var dom = parser.parseFromString(r.responseText, "application/xml");
	var videos = dom.getElementsByTagName('seq');
	
	var currentChapter = "";
	var links = "";

	for (var i = 0; i < videos.length; i++) {
		var video = videos[i];
		var nielsen = video.getElementsByTagName('param')[0].textContent;
		
		/* Work out chapter number by splitting by doing a RegExp */
		var re = new RegExp("chapt-(\\d+)$");
		var chapter = ""; match = re.exec(nielsen); if(match) { chapter = match[1]; }
		
		if(chapter) {
			var chapters = video.getElementsByTagName('video');
			for(var j = 0; j < chapters.length; j++) {
				var url = chapters[j].getAttribute("src");
				if(url.indexOf("http") > -1) {
					var bitrate = chapters[j].getAttribute("systemBitrate");
					bitrate = Math.ceil(bitrate / 1000) + "k";
					if(chapter != currentChapter) {
						if(currentChapter != "") {
							links += "</tr>";
						}
						links += "<tr><td><div class=\"episode_num\">Chapter " + chapter + "</td>";
					}
					links += "<td><div class=\"episode_num\"><a href=\"" + url + "\">" + bitrate + "</a></div></td>";

					if(chapter != currentChapter) {
						currentChapter = chapter;
					}
				}
			}
			
			if(links == "") {
				links += "Sorry, this show can't be downloaded.";
			}

		}
	}

	if(currentChapter != "") { links += "</tr>"; }


	if(links != "") {
		var els = document.getElementsByTagName("div");
		for(i = 0; i < els.length; i++) { if(els[i].className == "episode_num") { episodeNum = els[i]; break; }}
		if(episodeNum) {
			episodeNum.innerHTML += "<br /><strong>Direct download links</strong><br />";
			episodeNum.innerHTML += "<table cellpadding=\"3\" cellspacing=\"3\" width=\"70%\">" + links + "</table>";
		}
	}
}