// ==SiteScript==
// @siteName アダルトシティ
// @siteUrl http://adultcity.to/
// @author mayan
// @authorUrl
// @scriptUrl
// @description
// @date 2017/11/06
// @version 0.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, "/" );
}
}
function isSiteUrl( url ) {
if ( url.match( /http:\/\/(www\.)?adultcity\.to\/video\/[^\/?]+/ ) ) return true;
return false;
}
function getVideoDetail( url ) {
url = url.replace( /:\/\/www\./, "://" );
if ( url.match( /http:\/\/(?:www\.)?adultcity\.to\/video\/([^\/?]+)/ ) ) {
var vid = RegExp.$1;
} else {
//return null;
}
var craving = new CravingSiteScript();
var objRef = { "text": "" };
try {
objRef.text = craving.getResponseText( url );
} catch ( e ) {
objRef.text = "";
}
if ( !objRef.text ) return null;
var title = "";
if ( !title &&
objRef.text.match( /
]*)?>\s*(.*?)\s*<\/title\s*>/im ) ) {
title = craving.decodeHtml( RegExp.$1 ).replace( /\s*\u2502[^\u2502]*$/,"" ).replace( /[\r\n\t]+/g," " ).replace( /^\s+/,"" );
}
if ( !title &&
objRef.text.match( /]*?class\s*=\s*("|')?bigtitle_v\1[^>]*>\s*(.*?)\s*<\/h2\s*>/im ) ) {
title = craving.decodeHtml( RegExp.$2 ).replace( /[\r\n\t]+/," " ).replace( /^\s+/,"" ).replace( /\s+$/,"" );
}
if ( !title ) title = "adultcity_" + ( vid || new Date().getTime() );
title = title.replace(/[\\\/:*?"<>|]/g, "_");
var realUrl = "";
realUrl = getRealUrl_dean( objRef, false, false );
if ( !realUrl ) return null;
return { videoTitle0: title, videoUrl0: realUrl };
}
function getRealUrl_dean( objRef, boolDean, boolSrt ) {
if ( boolSrt === true ) objRef.arrSrt = [];
if ( !objRef.text || typeof objRef.text != "string" ) return "";
var objReg_stup = /jwplayer\s*\([^)]*\)\.setup\(([\s\S]*?)\)\s*;/im;
var code = objReg_stup.test( objRef.text )? RegExp.$1: "";
if ( !code && boolDean === true ) {
var objReg_evl = /eval\((\s*function\s*\(\s*p\s*,\s*a\s*,\s*c\s*,\s*k\s*,\s*e\s*,\s*d\s*\)\s*\{[\s\S]*?\.split\(\s*'\|'\s*\)[^)]*?\))\)/gm;
while ( objReg_evl.test( objRef.text ) ) {
var tmp = RegExp.$1;
if ( tmp.match( /jwplayer/ ) ) {
try {
tmp = ( new Function( "var a=" + tmp + ";return a;" ) )();
} catch ( e ) {
tmp = "";
}
if ( tmp && typeof tmp == "string" && objReg_stup.test( tmp ) ) {
code = RegExp.$1;
break;
}
}
}
}
if ( !code || typeof code != "string" ) return "";
code = code.replace( /\r|\n/g,"" );
if ( boolSrt === true ) {
//objRef.arrSrt = [];
if ( code.match( /[,{]\s*("|')?tracks\1\s*:\s*(\[[^]]*\])\s*[,}]/m ) ) {
var tracks = RegExp.$2;
var objReg_tracks = /[[,]\s*(\{[^>]*?\})\s*(?=[,\]])/gm;
while ( objReg_tracks.test( tracks ) ) {
var track = RegExp.$1;
var track_file = track.match( /[{,]\s*("|')?file\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
if ( !track_file ) continue;
if ( track_file.match( /\/empty\.srt\s*(?:$|[?])/i ) ) continue;
var track_kind = track.match( /[{,]\s*("|')?kind\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
if ( !track_kind || track_kind.toLowerCase() != "captions" ) continue;
var track_label = track.match( /[{,]\s*("|')?label\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
objRef.arrSrt.push( {"file":track_file, "label":track_label} );
}
} else
if ( code.match( /[{,]\s*("|')?plugins\1\s*:\s*\{\s*("|')?captions-2\2\s*:\s*(\{[^}]*?\})/m ) ) {
var cp2 = RegExp.$3;
var cp2_files = cp2.match( /[{,]\s*("|')?files\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
var cp2_labels = cp2.match( /[{,]\s*("|')?labels\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
if ( cp2_files ) objRef.arrSrt.push( { "file":cp2_files, "label":cp2_labels } );
}
}//srt end
code = code.replace( /[,{]\s*("|')?tracks\1\s*:\s*(\[[^]]*\])\s*[,}]/m, "," );
code = code.replace( /("|')?logo\1\s*:\s*\{[^}]*\}/, "" ).replace( /("|')?related\1\s*:\s*\{[^}]*\}/, "" );
var realUrl = "";
if ( code.match( /[,{]\s*("|')?sources\1\s*:\s*(\[[^]]*\])\s*[,}]/m ) ) {
var plst = RegExp.$2;
var objReg = /\{[^}]*\}/gm;
var arrDat = [];
while ( objReg.test( plst ) ) {
var dat = RegExp.lastMatch;
var file = dat.match( /[{,]\s*("|')?file\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
if ( !file ) continue;
var etn = getExtension( file );
if ( etn != "flv" && etn != "mp4" ) continue;
var label = dat.match( /[{,]\s*("|')?label\1\s*:\s*("|')(.*?)\2\s*[},]/m )? RegExp.$3: "";
var rate = label.match( /(\d+)p/i )? parseInt( RegExp.$1, 10 ): 0;
if ( isNaN( rate ) ) rate = 0;
if ( label.toLowerCase() === "sd" ) rate = 480;
if ( label.toLowerCase() === "hd" ) rate = 720;
var obj = {};
obj.file = file;
obj.label = label;
obj.rate = rate;
arrDat.push( obj );
}
if ( arrDat.length > 0 ) {
arrDat.sort( function(a,b){ return b.rate - a.rate; } );
realUrl = arrDat[0].file;
}
}
if ( !realUrl ) {
code = code.replace( /[,{]\s*("|')?sources\1\s*:\s*(\[[^]]*\])\s*[,}]/m,"" );
if ( code.match( /[,{]\s*("|')?file\1\s*:\s*("|')(.*?)\2\s*[,}]/m ) ) {
realUrl = RegExp.$3;
}
}
if ( !realUrl &&
code.match( /\{\s*("|')?type\1\s*:\s*("|')html5\2\s*,\s*("|')?config\3\s*:\s*\{\s*("|')?file\4\s*:\s*('|")(.*?)\5/ ) ) {
realUrl = RegExp.$6;
}
return realUrl;
function getExtension( str ) {
var fn = str.split( /[?]/ )[0].split( "/" ).pop();
if ( !fn ) return "";
var pos = fn.lastIndexOf( "." );
if ( pos < 0 ) return "";
var extension = fn.substr( pos + 1 );
if ( extension ) return extension.toLowerCase();
else return "";
}
}