// ==SiteScript== // @siteName PORN.COM // @siteUrl http://www.porn.com/ // @author mayan // @authorUrl // @scriptUrl // @description // @date 2015/11/16 // @version 0.3 // ==/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, "/" ); } } function isSiteUrl( url ) { if ( url.match( /http:\/\/(?:[^\/?]+\.)?porn\.com\/videos\/([^\/?]+-)?\d+(?:$|\.html|\?|#)/ ) ) return true; if ( url.match( /http:\/\/(?:[^\/?]+\.)?porn\.com\/videos\/embed\/([^\/?]+-)?\d+(?:$|\.html|\?|#)/ ) ) return true; if ( url.match( /http:\/\/mobile\.porn\.com\/([^\/?]+-)?\d+\.html/ ) ) return true; return false; } function getVideoDetail( url ) { if ( url.match( /http:\/\/(?:[^\/?]+\.)?porn\.com\/videos\/(embed\/)?([^\/?]+-)?(\d+)(?:$|\.html|\?|#)/ ) ) { var vid = RegExp.$3; var type = RegExp.$1? "embed": "page"; var bk_title = RegExp.$2? RegExp.$2.replace( /-/g, " " ).replace( /^\s+/, "" ).replace( /\s+$/, "" ): ""; //if ( type == "embed" ) url = url.replace( /embed\/,"" ); } else if ( url.match( /http:\/\/mobile\.porn\.com\/([^\/?]+-)?(\d+)\.html/ ) ) { vid = RegExp.$2; bk_title = RegExp.$1? RegExp.$1.replace( /-/g, " " ).replace( /^\s+/, "" ).replace( /\s+$/, "" ): ""; type = "mobile"; } else { //return null; type = "unknown"; } var craving = new CravingSiteScript(); var objRtn = null; var realUrl = ""; //page route var objRtn_page = {}; if ( !realUrl ) { var pageurl = ""; if ( type == "page" || type == "unknown" ) { pageurl = url; } else if ( vid ) { pageurl = "http://www.porn.com/videos/" + vid; } objRtn_page = getVideoDetail_page( pageurl, craving, "page" ); realUrl = objRtn_page.url; } //embed route var objRtn_embed = {}; if ( !realUrl ) { var embedurl = ""; if ( type == "embed" ) { embedurl = url; } else if ( vid ) { embedurl = "http://www.porn.com/videos/embed/" + vid; } objRtn_embed = getVideoDetail_page( embedurl, craving, "embed" ); realUrl = objRtn_embed.url; } //mobile route var objRtn_mobile = {}; if ( !realUrl || type == "mobile" ) { var mobileurl = ""; if ( type == "mobile" ) { mobileurl = url; } else if ( vid ) { mobileurl = "http://mobile.porn.com/" + vid + ".html"; } objRtn_mobile = getVideoDetail_mobile( mobileurl, craving ); realUrl = realUrl || objRtn_mobile.url; } if ( !realUrl ) return null; var title = "";//same clip, but not same title on mobile if ( type != "mobile" ) { title = objRtn_page.title || objRtn_embed.title || bk_title; } else { title = objRtn_mobile.title || bk_title; } if ( !title ) title = "porncom_" + ( vid || new Date().getTime() ); title = title.replace(/[\\\/:*?"<>|]/g, "_"); return { videoTitle0: title, videoUrl0: realUrl }; } function redirectUrl( url ) { try { var objHttp = new ActiveXObject( "WinHttp.WinHttpRequest.5.1" ); objHttp.Open( "HEAD", url, false ); objHttp.Send(); var rdUrl = objHttp.Option( 1 ); } catch( e ) { rdUrl = ""; } if ( rdUrl ) return rdUrl; else return url; } function getContent( objRef, craving ) { if ( !objRef || typeof objRef != "object" || !objRef.tmpurl || typeof objRef.tmpurl != "string" ) return false; var tmpurl = objRef.tmpurl; try { objRef.text = craving.getResponseText( tmpurl ); } catch( e ) { objRef.text = ""; var errNo = e.number & 0xFFFF; } if ( errNo == 5 ) {//redirect error, etc. tmpurl = redirectUrl( tmpurl ); try { objRef.text = craving.getResponseText( tmpurl ); } catch( e ) { objRef.text = ""; } } if ( objRef.text ) return true; else return false; } function getVideoDetail_page( tmpurl, craving, type ) { var objRef = { "text":"", "tmpurl": tmpurl }; var objRet = { "title": "", "url": "" }; if ( !getContent( objRef, craving ) ) return objRet; var title = ""; if ( type != "embed" ) { if ( !title && objRef.text.match( /