// ==SiteScript== // @siteName Streamango // @siteUrl https://streamango.com/ // @author mayan // @authorUrl // @scriptUrl // @description // @date 2018/08/25 // @version 0.1.2 // ==/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 _Gbl = {}; _Gbl.showSrt = true; function isSiteUrl( url ) { if ( url.match( /https?:\/\/streamango\.com\/f\/[^\/?]+/ ) ) return true; if ( url.match( /https?:\/\/streamango\.com\/embed\/[^\/?]+/ ) ) return true; if ( url.match( /https?:\/\/streamcherry\.com\/f\/[^\/?]+/ ) ) return true; if ( url.match( /https?:\/\/streamcherry\.com\/embed\/[^\/?]+/ ) ) return true; return false; } function getVideoDetail( url ) { url = url.replace( /^\s*http:\/\//, "https://" ); if ( url.match( /https?:\/\/(streamango|streamcherry)\.com\/f\/([^\/?]+)/ ) ) { var domain = RegExp.$1; var vid = RegExp.$2; var type = "page"; var pageurl = url; } else if ( url.match( /https?:\/\/(streamango|streamcherry)\.com\/embed\/([^\/?]+)/ ) ) { domain = RegExp.$1; vid = RegExp.$2; type = "embed"; var embedurl = url; } else { //return null; type = "unknown"; pageurl = url; } var craving = new CravingSiteScript(); var title = ""; var objRef_e = {}; var objRef_p = {}; switch ( type ) { case "embed": objRef_e = getDetail_embed( embedurl, craving ); if ( objRef_e.realUrl ) { title = getTitle( objRef_e, objRef_p, vid, domain ); if ( _Gbl.showSrt ) showSrt( objRef_e.arrSrt ); return { "videoUrl0": objRef_e.realUrl, "videoTitle0": title }; } if ( vid ) { pageurl = "https://" + domain + ".com/f/" + vid + "/"; objRef_p = getDetail_page( pageurl, craving ); if ( objRef_p.realUrl ) { title = getTitle( objRef_p, objRef_e, vid, domain ); if ( _Gbl.showSrt ) showSrt( objRef_p.arrSrt ); return { "videoUrl0": objRef_p.realUrl, "videoTitle0": title }; } } break; case "page": case "unknown": objRef_p = getDetail_page( pageurl, craving ); if ( objRef_p.realUrl ) { title = getTitle( objRef_p, objRef_e, vid, domain ); if ( _Gbl.showSrt ) showSrt( objRef_p.arrSrt ); return { "videoUrl0": objRef_p.realUrl, "videoTitle0": title }; } if ( vid ) { embedurl = "https://" + domain + ".com/embed/" + vid + "/"; objRef_e = getDetail_embed( embedurl, craving ); if ( objRef_e.realUrl ) { title = getTitle( objRef_e, objRef_p, vid, domain ); if ( _Gbl.showSrt ) showSrt( objRef_e.arrSrt ); return { "videoUrl0": objRef_e.realUrl, "videoTitle0": title }; } } break; default: } return null; function getTitle( objRef_1, objRef_2, vid, domain ) { var title = objRef_1.title || objRef_2.title; if ( !title ) title = (domain?domain+"_":"streamango_") + ( vid || new Date().getTime() ); title = title.replace(/[\\\/:*?"<>|]/g, "_"); return title; } function getDetail_embed( url, craving ) { return getDetail_sub( url, "embed", craving ); } function getDetail_page( url, craving ) { return getDetail_sub( url, "page", craving ); } function getDetail_sub( url, type, craving ) { var objRef = { "realUrl":"", "title":"", "arrSrt":[], "arrDsh":[], "text":"" }; var referer = "https://openload.co/";//2018/08/25 try { objRef.text = craving.getResponseText( url ); } catch ( e ) { objRef.text = ""; } var arrRrl = []; var arrDsh = []; setArr( objRef, arrRrl, arrDsh ); if ( type == "embed" && ( arrRrl.length <= 0 && arrDsh.length <= 0 ) ) { objRef.text = ""; try { var objHttp = new ActiveXObject( "WinHttp.WinHttpRequest.5.1" ); objHttp.open( "GET", url, false ); objHttp.setRequestHeader( "Referer", ( referer || url ) ); objHttp.send(); objRef.text = objHttp.responseText; } catch ( e ) { objRef.text = ""; } setArr( objRef, arrRrl, arrDsh ); } if ( arrRrl.length <= 0 && arrDsh.length <= 0 ) return objRef; if ( !objRef.text ) return objRef; var title = ""; if ( !title && objRef.text.match( /]*?name\s*=\s*("|')?(?:og|twitter):title\1[^>]*?)>/im ) && RegExp.$1.match( /\s+content\s*=\s*("|')(.*?)\1/im ) ) { title = craving.decodeHtml( RegExp.$2 ); } if ( type == "page" ) { if ( !title && objRef.text.match( /