// ==SiteScript==
// @siteName iDoWatch
// @siteUrl http://idowatch.net/
// @author mayan
// @authorUrl
// @scriptUrl
// @description
// @date 2016/05/17
// @version 0.1
// ==/SiteScript==
function CravingSiteScript() {
this._initialize();
}
CravingSiteScript.prototype = {
_xhr: null,
_initialize: function() {},
_getXmlHttpRequest: function() {
if ( this._xhr != null ) {
return this._xhr;
}
var xhr = null;
var these = [
function() { return new XMLHttpRequest(); }
, function() { return new ActiveXObject( "Msxml2.XMLHTTP" ); }
, function() { return new ActiveXObject( "Microsoft.XMLHTTP" ); }
, function() { return new ActiveXObject( "Msxml2.XMLHTTP.4.0" ); }
];
for ( var i = 0, length = these.length; i < length; i++ ) {
var func = these[ i ];
try {
xhr = func();
break;
}
catch( e ) {}
}
this._xhr = xhr;
return this._xhr;
},
_load: function( url, data, method ) {
var req = this._getXmlHttpRequest();
var mtd = ( method == null ) ? "GET" : "POST";
req.open( mtd, url, false );
if ( mtd == "POST" ) {
req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
}
req.send( data );
return req.responseText;
},
getResponseText: function( url, data, method ) {
return this._load( url, data, method );
},
getResponseJSON: function( url, data, method ) {
var text = this._load( url, data, method );
return eval( "("+text+")" );
},
/// Math
random: function( limit ) {
return Math.floor( Math.random() * limit );
},
/// String
decodeHtml: function( str ) {
return str.replace( /&(quot|#0*34);/ig, "\"" )
.replace( /&(amp|#0*38);/ig, "&" )
.replace( /&(apos|#0*39);/ig, "'" )
.replace( /&(lt|#0*60);/ig, "<" )
.replace( /&(gt|#0*62);/ig, ">" )
.replace( /&(nbsp|#0*160);/ig, " " )
.replace( /&(frasl|#8260);/ig, "/" );
}
}
var _Global = {};
_Global.useSmil = false;
function isSiteUrl( url ) {
if ( url.match( /http:\/\/(?:www\.)?idowatch\.net\/[0-9a-z]{12}/i ) ) return true;
if ( url.match( /http:\/\/(?:www\.)?idowatch\.net\/embed-[0-9a-z]{12}(?:-\d+x\d+)?\.html/i ) ) return true;
return false;
}
function getVideoDetail( url ) {
if ( typeof _Global != "object" ) _Global = {};
if ( url.match( /http:\/\/(?:www\.)?idowatch\.net\/([0-9a-z]{12})/i ) ) {
var vid = RegExp.$1;
} else
if ( url.match( /http:\/\/(?:www\.)?idowatch\.net\/embed-([0-9a-z]{12})(?:-\d+x\d+)?\.html/i ) ) {
vid = RegExp.$1;
} else {
return null;
}
if ( !vid ) return null;
var craving = new CravingSiteScript();
var pageurl = "http://idowatch.net/" + vid;
try {
var text = craving.getResponseText( pageurl );
} catch ( e ) {
text = "";
}
if ( !text ) return null;
var title = "";
if ( text.match( /
]*?id\s*=\s*("|')?video-content\1[^>]*>\s*
]*)?>\s*(.*?)\s*<\/h2\s*>/im ) ) {
title = craving.decodeHtml( RegExp.$2 );
}
if ( !title &&
text.match( /]*)?>\s*(.*?)\s*<\/title\s*>/im ) ) {
title = craving.decodeHtml( RegExp.$1 ).replace( /^\s*Watch\s*/i,"" );
}
if ( !title ) title = "idowatch_" + ( vid || new Date().getTime() );
title = title.replace(/[\\\/:*?"<>|]/g, "_");
var arrR = [];
var arrS = [];
if ( text.match( /[{,]\s*("|')?sources\1\s*:\s*(\[[\s\S]*?\])\s*[},]/m ) ) {
var sources = RegExp.$2;
var objReg = /[[,]\s*(\{[\s\S]*?\})\s*(?=[,\]])/gm
while ( objReg.test( sources ) ) {
var elem = RegExp.$1;
var obj = {};
obj.file = elem.match( /[{,]\s*("|'|)?file\1\s*:\s*("|')(.*?)\2\s*[,}]/m )? RegExp.$3: "";
if ( !obj.file ) continue;
obj.extn = obj.file.split(/[?]/)[0].match( /\.([^\/.]+)$/ )? RegExp.$1.toLowerCase(): "";
if ( obj.extn == "flv" || obj.extn == "mp4" ) {
obj.label = elem.match( /[{,]\s*("|'|)?label\1\s*:\s*("|')(.*?)\2\s*[,}]/m )? RegExp.$3.toLowerCase(): "";
if ( obj.label.match( /(\d+)p/i ) ) obj.label_n = parseInt( RegExp.$1, 10 );
else if ( obj.label == "high" ) obj.label_n = 480;
else if ( obj.label == "normal" ) obj.label_n = 360;
else if ( obj.label == "low" ) obj.label_n = 240;
else obj.label_n = 0;
arrR.push( obj );
} else if ( obj.extn == "smil" ) {
arrS.push( obj );
} else {
continue;
}
}
}
var realUrl_r = "";
var label_r = 0;
if ( arrR.length > 0 ) {
arrR.reverse();
arrR.sort( function(a,b){return b.label_n - a.label_n;} );
realUrl_r = arrR[0].file;
label_r = arrR[0].label_n;
}
if ( !_Global.useSmil && realUrl_r ) {
return { videoTitle0: title, videoUrl0: realUrl_r };
}
//.useSmil
var realUrl_s = "";
var label_s = 0;
if ( arrS.length > 0 ) {
arrS.reverse();
var objS = mkRealUrlfromSmil( arrS[0].file, craving );
if ( objS ) {
realUrl_s = objS.realUrl;
label_s = objS.height;
}
}
var realUrl = "";
if ( realUrl_r && realUrl_s ) {
if ( label_s > label_r ) realUrl = realUrl_s;
else realUrl = realUrl_r;
} else if ( realUrl_s ) {
realUrl = realUrl_s;
} else {
realUrl = realUrl_r;
}
if ( !realUrl ) return null;
return { videoTitle0: title, videoUrl0: realUrl };
}
function mkRealUrlfromSmil( smil, craving ) {
try {
var text = craving.getResponseText( smil );
} catch ( e ) {
text = "";
}
if ( !text ) return null;
if ( text.match( /]*?base\s*=\s*("|')(.*?)\1[^>]*>/im )
&& RegExp.$2.match( /:\/\/([^\/?:]+)/ ) ) {
var base = RegExp.$1;
}
if ( !base ) return null;
var objReg = /