Greasy Fork is available in English.

Stream to VLC

Opens VLC from streaming sites

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         Stream to VLC
// @namespace    http://tampermonkey.net/
// @version      2.7
// @description  Opens VLC from streaming sites
// @author       mattiadr, giuseppe-dandrea
// @match        http*://openload.co/*
// @match        http*://openloads.co/*
// @match        http*://oload.download/*
// @match        http*://oload.fun/*
// @match        http*://turbovid.me/*
// @match        http*://www.flashx.to/*
// @match        http*://www.flashx.tv/*
// @match        http*://www.flashx.sx/*
// @match        http*://www.rapidvideo.com/*
// @match        http*://wstream.video/*
// @match        www.video.mediaset.it/*
// @match        http*://speedvideo.net/*
// @match        http*://*mp4upload.com/embed*
// @match        http*://didattica.polito.it/portal/pls/portal/sviluppo.videolezioni.vis*
// @match        http*://didattica.polito.it/portal/pls/portal/sviluppo.pagina_corso.main?t=3&p_sottopagina=VC*
// @grant        window.close
// @grant        GM_openInTab
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

(function() {

/* global vars */
/*******************************************************************************************************************************************************************/
let url = null;
let suppress_close = false;

/* helper functions */
/*******************************************************************************************************************************************************************/
function play_url(url) {
	if (url !== null) {
		window.location.href = 'vlcs:' + url;
		if (GM_getValue("VLC_first_time", true)) {
			alert("Please always remember choice or you will need to edit source code (see Readme for more info)");
			GM_setValue("VLC_first_time", false);
		} else {
			new Promise((resolve) => setTimeout(resolve, 1000)).then(() => {
				//Comment the next line to be able  authorize xdg-open
				if (!suppress_close) window.close();
			});
		}
	}
}

function wait_until_video_click() {
	new Promise((resolve) => setTimeout(resolve, 1000)).then(() => {
		if ($('video')[0].src.indexOf('http') != -1) {
			url = $('video')[0].src;
			play_url(url);
		} else {
			wait_until_video_click();
		}
	});
}

function wait_until_wstream_click() {
	new Promise((resolve) => setTimeout(resolve, 1000)).then(() => {
		var video = $('video');
		url = find_valid_url(video);
		if (url) play_url(url)
		else wait_until_wstream_click();
	});
}

function wait_until_mediaset_ready() {
	new Promise((resolve) => setTimeout(resolve, 1000)).then(() => {
		if ($('video > source')[0].src.indexOf('http') != -1) {
			url = $('video > source')[0].src;
			play_url(url);
		} else {
			wait_until_mediaset_ready();
		}
	});
}

function find_valid_url(video_tag_list) {
	for (var i = 0; i < video_tag_list.length; i++) {
		if (video_tag_list[i].src && video_tag_list[i].src.indexOf('http') != -1 ) {
			return video_tag_list[i].src;
		}
	}
	return false;
}
/* pages functions */
/*******************************************************************************************************************************************************************/
let page = {};

page['openload.co'] = function() {
	$('#videooverlay').trigger('click');
	url = $('#olvideo_html5_api')[0].src;
}

page['openloads.co'] = page['openload.co'];
page['oload.download'] = page['openload.co'];
page['oload.fun'] = page['openload.co'];

page['turbovid.me'] = function() {
	$('html').removeClass(" js ");
	if ($('#video-content').length === 0) {
		//$('#container > h2').append("<h1 style=\"color:red;\">WAIT AND CLICK ON BUTTON</h1>");
		$('#container > h2').append("<h1 style=\"color:red;\">WAIT, THE BUTTON WILL BE PRESSED AUTOMATICALLY</h1>");
		new Promise((resolve) => setTimeout(resolve, 9000)).then(() => {
		   $('#btn_download').trigger('click');
		});
	} else {
		//$('#content > h2').append("<h1 style=\"color:red;\">CLICK ON VIDEO TO START VLC</h1>");
		wait_until_video_click();
	}
}

page['flashx.to'] = function() {
	if ($('video').size() === 0) {
		$('#main > center > h2').append("<h1 style=\"color:red;\">WAIT, THE BUTTON WILL BE PRESSED AUTOMATICALLY</h1>");
		new Promise((resolve) => setTimeout(resolve, 6000)).then(() => {
			$('#btn_download').trigger('click');
		});
	} else {
		new Promise((resolve) => setTimeout(resolve, 2000)).then(() => {
			url = $('video')[0].src;
			play_url(url);
		});
	}
}

page['flashx.tv'] = page['flashx.to'];

page['flashx.sx'] = function() {
	page['flashx.to']();

	$('body').append("<h1 id=\"info\" style=\"color:red;padding:20px\">CLICK ON VIDEO (until the ads end) TO START VLC.</h1>");
	$("#info").append("<h1 style=\"color:lime;padding:120px;font-size:15px;\">Remember to close the tab if the video is in an iframe, because the script cannot close tabs from iframes and probably there is a MINER in the site</h1>");
	$('body > center > div > div:nth-child(2) > div.BJPPopAdsOverlay').remove();
	wait_until_video_click();
}

page['rapidvideo.com'] = function() {
	url = $('video')[0].src;
}

page['wstream.video'] = function() {
	//$('#video-content > table > tbody > tr > td:nth-child(1) > h3').append("<h1 style=\"color:red;\">CLICK ON VIDEO TO START VLC</h1>");
	wait_until_wstream_click();
}

page['video.mediaset.it'] = function() {
	new Promise((resolve) => setTimeout(resolve, 3000)).then(() => {
		wait_until_mediaset_ready();
	});
}

page['speedvideo.net'] = function() {
	wait_until_video_click();
}

page['mp4upload.com'] = function() {
	new Promise((resolve) => setTimeout(resolve, 1000)).then(() => {
		url = $('video')[0].src;
		play_url(url);
	});
}

page['didattica.polito.it'] = function() {
	let vlcButton = $('<button class="btn btn-default btn-sm">PLAY ON VLC</button>');
	vlcButton.click(function() {
		let url_ = $('video > source')[0].src;
		play_url(url_);
	});
	$('#btnTag').after(vlcButton);
	$('#btnTag').after('\n&nbsp;&nbsp;\n');
	$('#portlet_corso_container > div > div > div.container-fluid > div > div.col-md-8 > div > div').append(vlcButton);
	suppress_close = true;
}

/* main */
/*******************************************************************************************************************************************************************/
for (let key in page) {
	// check if the key is inside page and not inherited from parent
	if (page.hasOwnProperty(key) && window.location.href.indexOf(key) != -1) {
		page[key]();
		play_url(url);
		break;
	}
}

})();