Greasy Fork

Greasy Fork is available in English.

Download video.sibnet.ru

Выдает ссылку в правом нижнем углу плеера (в поле размера файла)

当前为 2017-06-30 提交的版本,查看 最新版本

// ==UserScript==
// @name        Download video.sibnet.ru
// @namespace   http://video.sibnet.ru
// @description Выдает ссылку в правом нижнем углу плеера (в поле размера файла)
// @include     http://video.sibnet.ru/*
// @include     http://video.sibnet.ru/video*
// @include     http://video.sibnet.ru/*/video*
// @include     https://video.sibnet.ru/*
// @include     https://video.sibnet.ru/video*
// @include     https://video.sibnet.ru/*/video*
// @version     1.2.1
// @grant       none
// ==/UserScript==

window.onload = function(){
var video_path = findVideoPath();// get video path name '/v/{numbers}/{videoid}.mpd' from current html source page
var xmlHttp = createXMLHttpObject();
if( xmlHttp )
{
	xmlHttp.onreadystatechange = function()
	{
		if( xmlHttp.readyState == 4 && xmlHttp.status == 200 )
		{
			var video_link = findVideoLink( xmlHttp.responseText );// get downloadable video link
			var result = insertLink( video_link );// try to insert the link into 'video_size' element of html source page
			if( result )// if failed to insert the link then 
				window.location = video_link;// open it in current page
		}
	}
	xmlHttp.open('GET', video_path, true);//  send 'GET' request to 'http://video.sibnet.ru/v/{numbers}/{videoid}.mpd'
	xmlHttp.send(null);
}

function findVideoPath()
{
	var source_str = document.documentElement.innerHTML;
	var pos = source_str.indexOf( "player.src([{src: \"" );
	if( pos == -1 )
	{
		console.error( "Error: matching 'player.src([{src: \"' string not found");
		return null;
	}
	pos = source_str.indexOf("/v/", pos);
	var end = source_str.indexOf(".mpd", pos);
	if( end == -1 )
	{
		console.error("Error: matching '.mpd' string not found");
		return null;
	}
	var result_str = source_str.substring(pos, end) + ".mpd";
	return result_str;
}

function createXMLHttpObject() //  create xmlHttp object
{
	if( window.XMLHttpRequest )
	{
		return new XMLHttpRequest();
	}
	else if( window.ActiveXObject )
	{
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		console.error( "Error: can't create xmlHttp object");
		return null;
	}
}

function findVideoLink( source_str )
{
	var pos = source_str.indexOf("initialization=\"");
	if( pos == -1 )
	{
		console.error( "Error: matching string 'initialization=\"' not found");
		return null;
	}
	pos = source_str.indexOf("http", pos);
	var end = source_str.indexOf("noip=1", pos);
	if( end == -1 )
	{
		console.error( "Error: matching string 'noip=1' not found");
		return null;
	}
	source_str = source_str.substring(pos, end) + "noip=1";
	var result_str = source_str.replace("amp;", "");
	for( var count = 0; source_str.length != result_str.length && count < 10; ++count )
	{
		source_str = result_str;
		result_str = source_str.replace("amp;", "");
	}
	result_str = result_str.replace("/init-$RepresentationID$", "");
	return result_str;
}

function insertLink( source_link ) // insert hyper reference in video_size element  
{
	var all_td = document.getElementsByTagName('td');
	if( all_td && source_link )
	{
		for( var i = 0; i < all_td.length; ++i )
		{
			if(all_td[i].className == 'video_size')
			{
				all_td[i].innerHTML = '<a href="' + source_link + '">' + all_td[i].textContent + '</a>';
				return 0;
			}
		}
	}
	//return 1;
	else if( all_td )
	{
		console.error( "Error: invalid link passed");
	}
	else if( source_link )
	{
		console.error( "Error: can't get elements by tag name 'td'" );
	}
	else
	{
		console.error( "Error: no elements found by tag name 'td'; invalid link passed");
	}
	return 1;
}
};