([\s\S]+?)<\/div>/m ) ) {
title = RegExp.$1.replace( /\s*<[^>]*?>\s*/g, "" );
}
if ( !title ) title = "tube8_" + vid;
title = title.replace(/[\\\/:*?"<>|]/g, "_");
if ( text.match( /\bhash\s*=\s*("|')(.*?)\1\s*;/ ) )
var hash = RegExp.$2;
else return null;
var phpurl = "http://www.tube8.com/ajax/getVideoDownloadURL.php"
+ "?_=" + ( new Date() ).getTime()
+ "&hash=" + hash
+ "&video=" + vid;
try {
var objHttp = new ActiveXObject( "WinHttp.WinHttpRequest.5.1" );
objHttp.Open( "GET", phpurl, false );
objHttp.SetRequestHeader( "Referer", url );
objHttp.Send();
text = objHttp.ResponseText;
} catch( e ) {
text = "";
}
if ( !text ) return null;
if ( !text.match( /("|')standard_url\1\s*:\s*("|')(.*?)\2/ ) ) return null;
if ( RegExp.$3 ) var realUrl = RegExp.$3.replace( /\\\//g, "/" );
if ( !realUrl ) return null;
return { videoTitle0: title, videoUrl0: realUrl };
}
//public
this.isSiteUrl = isSiteUrl;
this.getVideoDetail = getVideoDetail;
}
/* Tube8 ここまで */
/* RedTube */
function clsRedTube( craving ) {
// ==SiteScript==
// @siteName RedTube
// @siteUrl http://redtube.com/
// @author DarkKnight
// @authorUrl http://darkknightlabs.com/
// @scriptUrl http://darkknightlabs.com/site-script/
// @description example by Mayan, 2013/06/21
// @date 2010/09/19
// @version 0.3
// ==/SiteScript==
/* CravingSiteScrit class 削除 */
/* var craving = new CravingSiteScript();をコメントアウト */
function isSiteUrl( url ) {
if ( url.match( /http:\/\/(www\.)?redtube\.com\/\d+/ ) ) return true;
//embed
if ( url.match( /http:\/\/embed\.redtube\.com\/player\/?(\?.+)/ )
&& RegExp.$1.match( /[?&]id=\d+/ ) ) return true;
return false;
}
function getVideoDetail( url ) {
if ( url.match( /http:\/\/(?:www\.)?redtube\.com\/(\d+)/ ) ) {
var vid = RegExp.$1;
var aftershape = url.split( "#" )[1];
} else if ( url.match( /http:\/\/embed\.redtube\.com\/player\/?(\?.+)/ )
&& RegExp.$1.match( /[?&]id=(\d+)/ ) ) {
vid = RegExp.$1;
} else {
return null;
}
if ( !vid ) return null;
//var craving = new CravingSiteScript();
var pageurl = "http://www.redtube.com/" + vid;
try {
var text = craving.getResponseText( pageurl );
} catch( e ) {
text = "";
}
if ( !text ) return null;
if ( text.match( /so\.addParam\(\s*("|')flashvars\1\s*,\s*("|')(.*?)\2/ ) ) {
var prm = RegExp.$3;
}
if ( !prm &&
text.match( /
]*?name\s*=\s*("|')?FlashVars\2[^>]*)>/i )
&& RegExp.$1.match( /\s+value\s*=\s*("|')(.*?)\1/i ) ) {
prm = RegExp.$2;
}
if ( !prm ) return null;
prm = "&" + prm;
var hashlink = ( prm.match( /&hashlink=([^&]+)/ )? RegExp.$1: "" );
var flv_url = ( prm.match( /&flv_url=([^&]+)/ )? RegExp.$1: "" );
var mp4_url = ( prm.match( /&mp4_url=([^&]+)/ )? RegExp.$1: "" );
var flv_h264_url = ( prm.match( /&flv_h264_url=([^&]+)/ )? RegExp.$1: "" );
//ignore aftershape
var realUrl = flv_h264_url || mp4_url || flv_url || hashlink;
if ( !realUrl ) return null;
realUrl = decodeURIComponent( realUrl );
if ( text.match( /
]*)?>\s*(.*?)\s*<\/h1\s*>/i ) ) {
var title = craving.decodeHtml( RegExp.$1 );
}
if ( !title &&
text.match( /]*)?>\s*(.*?)\s*<\/title\s*>/i ) ) {
title = craving.decodeHtml( RegExp.$1 ).replace( /\s*\|[^|]*$/, "" );
}
if ( !title ) title = "redtube_" + vid;
title = title.replace(/[\\\/:*?"<>|]/g, "_");
return { videoTitle0: title, videoUrl0: realUrl };
}
//public
this.isSiteUrl = isSiteUrl;
this.getVideoDetail = getVideoDetail;
}
/* RedTube ここまで */
/* KeezMovies */
function clsKeezMovies( craving ) {
// ==SiteScript==
// @siteName KeezMovies
// @siteUrl http://www.keezmovies.com/
// @author DarkKnight
// @authorUrl http://darkknightlabs.com/
// @scriptUrl http://darkknightlabs.com/site-script/
// @description revised by mayan, 2012/04/27
// @date 2010/09/18
// @version 0.3.0.1
// ==/SiteScript==
/* CravingSiteScrit class 削除 */
/* var craving = new CravingSiteScript();をコメントアウト */
/* base64Decode を別途用意のこと */
/* clsDecrypt()を削除、clsPornHub の clsAES()を使っています。
これに伴い、function decryptUrl を書き換えています */
function isSiteUrl( url ) {
if ( url.match( /http:\/\/(www\.)?keezmovies\.com\/video\/[^\/]+-\d+/ ) ) return true;
if ( url.match( /http:\/\/(www\.)?keezmovies\.com\/\d+/ ) ) return true;
//embed
if ( url.match( /http:\/\/(www\.)?keezmovies\.com\/embed\/[^\/]+-\d+/ ) ) return true;
return false;
}
function getVideoDetail( url ) {
url = url.replace( /http:\/\/keezmovies\.com\//, "http://www.keezmovies.com/" );
if ( url.match( /http:\/\/www\.keezmovies\.com\/(video|embed)\/([^\/?]+)/ ) ) {
var tid = RegExp.$2;
if ( tid.match( /-(\d+)$/ ) ) var vid = RegExp.$1;
} else if ( url.match( /http:\/\/www\.keezmovies\.com\/(\d+)/ ) ) {
var vid = RegExp.$1;
} else {
//return null;
}
//var craving = new CravingSiteScript();
try {
var text = craving.getResponseText( url );
} catch( e ) {
text = "";
}
if ( !text ) return null;
if ( text.match( /\s*(.+?)\s*<\/title>/ ) )
var title = craving.decodeHtml( RegExp.$1.replace( /\s*-[^-]*$/, "" ) );
if ( text.match( /var\s+flashvars\s*=\s*(\{[^}]+\})\s*;/ ) ) {
try {
var obj = eval( "(" + RegExp.$1 + ")" );
var video_url = obj.video_url;
var video_title = obj.video_title;
var encrypted = obj.encrypted;
} catch( e ) { }
}
if ( !video_url || ( encrypted == true && !video_title ) ) {
if ( text.match( /]*?name\s*=\s*"flashvars"[^>]*)>/ )
&& RegExp.$1.match( /\s+value\s*=\s*"([^"]*?)"/ ) ) {
var value = RegExp.$1;
if ( value.match( /video_url=([^&]+)/ ) ) {
video_url = decodeURIComponent( RegExp.$1 )
}
if ( value.match( /video_title=([^&]+)/ ) ) {
video_title = RegExp.$1;
}
if ( value.match( /encrypted=([^&]+)/ ) ) {
var enc = RegExp.$1;
if ( enc == "true" || enc == "1" ) encrypted = true;
else encrypted = false;
}
}
}
if ( !video_url ) return null;
if ( encrypted == true ) {
if ( !video_title ) return null;
var realUrl = decryptUrl( video_url, video_title );
} else {
realUrl = video_url;
}
if ( !realUrl ) return null;
if ( !title && video_title ) title = decodeURIComponent( video_title.replace( /\+/g, " " ) );
if ( !title && tid ) title = tid;
if ( !title && vid ) title = "keezmovies_" + vid;
if ( !title ) title = "keezmovies_" + ( new Date() ).getTime();
title = title.replace(/[\\\/:*?"<>|]/g, "_");
return { videoTitle0: title, videoUrl0: realUrl };
}
function base64_unsafe( encStr ) {
return encStr.replace( /\s/g, "" ).replace( /_/g, "/" ).replace( /-/g, "+" ).replace( /\*/, "=" );
}
function decryptUrl( strB64Text, strKey ) {
strB64Text = base64_unsafe( decodeURIComponent( strB64Text ) );
strKey = decodeURIComponent( strKey.replace( /\+/g, " " ) );
return ( new ( new clsPornhub( craving ) ).clsAES ).decrypt( strB64Text, strKey, 256 );
}
//public
this.isSiteUrl = isSiteUrl;
this.getVideoDetail = getVideoDetail;
}
/* KeezMovies ここまで */
/* SlutLoad */
function clsSlutLoad( craving ) {
// ==SiteScript==
// @siteName slutload
// @siteUrl http://www.slutload.com/
// @author DarkKnight
// @authorUrl http://darkknightlabs.com/
// @scriptUrl http://darkknightlabs.com/site-script/
// @description revised by mayan, 2013/02/21
// @date 2010/09/19
// @version 0.2.0.1
// ==/SiteScript==
/* CravingSiteScrit class 削除 */
/* var craving = new CravingSiteScript();をコメントアウト */
function isSiteUrl( url ) {
if ( url.match( /http:\/\/(www\.)?slutload\.com\/watch\/[^\/?]+/ ) ) return true;
if ( url.match( /http:\/\/emb\.slutload\.com\/[^\/?]+/ ) ) return true;
return false;
}
function getVideoDetail( url ) {
if ( url.match( /http:\/\/(www\.)?slutload\.com\/watch\/([^\/?]+)/ ) ) {
var pageurl = url.replace( /http:\/\/slutload\.com\//, "http://www.slutload.com/" );
var vid = RegExp.$2;
} else if ( url.match( /http:\/\/emb\.slutload\.com\/([^\/?]+)/ ) ) {
vid = RegExp.$1;
pageurl = "http://www.slutload.com/watch/" + vid;
} else {
return null;
}
//var craving = new CravingSiteScript();
try {
var text = craving.getResponseText( pageurl );
} catch( e ) {
text = "";
}
if ( text ) {
if ( text.match( /[{,]\s*('|")?flv\1\s*:\s*('|")(.*?)\2\s*[},]/ ) ) {
var realUrl = decodeURIComponent( RegExp.$3 );
}
if ( text.match( /]*)?>\s*(.*?)\s*<\/title>/ ) ) {
var title = craving.decodeHtml( RegExp.$2 ).replace( /\s*-[^-]*$/, "" );
}
if ( !title &&
text.match( /]*?property\s*=\s*("|')?og:title\2[^>]*)>/ )
&& RegExp.$1.match( /\s+content\s*=\s*("|')(.*?)\1/ ) ) {
title = craving.decodeHtml( RegExp.$2 ).replace( /\s*-[^-]*$/, "" );
}
}
if ( !title ) title = "slutload_" + vid;
title = title.replace(/[\\\/:*?"<>|]/g, "_");
if ( realUrl ) {
return { videoTitle0: title, videoUrl0: realUrl };
}
//embed route
var xplurl = "http://emb.slutload.com/xplayerconfig/" + vid + ".css";
try {
text = craving.getResponseText( xplurl );
} catch( e ) {
text = "";
}
if( !text ) return null;
if ( text.match( /config\.stream\{[^}]*?URL\s*:\s*([^;]+)[^}]*\}/ ) ) {
realUrl = decodeURIComponent( RegExp.$1 );
}
if ( !realUrl ) return null;
return { videoTitle0: title, videoUrl0: realUrl };
}
//public
this.isSiteUrl = isSiteUrl;
this.getVideoDetail = getVideoDetail;
}
/* SlutLoad ここまで */
/* HardSexTube */
function clsHardSexTube( craving ) {
// ==SiteScript==
// @siteName hardsextube
// @siteUrl http://www.hardsextube.com/
// @author DarkKnight
// @authorUrl http://darkknightlabs.com/
// @scriptUrl http://darkknightlabs.com/site-script/
// @description example by mayan, 2013/01/16
// @date 2010/09/05
// @version 0.3
// ==/SiteScript==
/* CravingSiteScrit class 削除 */
/* var craving = new CravingSiteScript();をコメントアウト */
/* base64Decode を別途用意のこと */
function isSiteUrl( url ) {
if ( url.match( /http:\/\/([^\/]+\.)?hardsextube\.com\/video\/\d+/ ) ) return true;
if ( url.match( /http:\/\/([^\/]+\.)?hardsextube\.com\/embed\/\d+/ ) ) return true;
return false;
}
function getVideoDetail( url ) {
if ( url.match( /http:\/\/([^\/]+\.)?hardsextube\.com\/video\/(\d+)/ ) ) {
var vid = RegExp.$2;
} else if ( url.match( /http:\/\/([^\/]+\.)?hardsextube\.com\/embed\/(\d+)/ ) ) {
vid = RegExp.$2;
url = "http://www.hardsextube.com/video/" + vid + "/";
} else {
return null;
}
var craving = new CravingSiteScript();
try {
var text = craving.getResponseText( url );
} catch( e ) {
text = "";
}
if ( !text ) {//suppose a redirect error.
try {
var objHttp = new ActiveXObject( "WinHttp.WinHttpRequest.5.1" );
objHttp.open( "GET", url, false );
objHttp.send();
text = objHttp.responseText;
} catch( e ) {
text = "";
}
}
if ( !text ) return null;
if ( text.match( /]*?id\s*=\s*("|')title\1[^>]*>\s*(.*?)\s*<\/div>/ ) )
var title = craving.decodeHtml( RegExp.$2 );
if ( !title && text.match( /
\s*(.*?)\s*<\/title>/ ) )
title = craving.decodeHtml( RegExp.$1.replace( /\s*-[^-]*$/, "" ) );
if ( !title ) title = "hardsex_" + vid;
title = title.replace(/[\\\/:*?"<>|]/g, "_");
if ( text.match( /flvserver\s*:\s*"([^"]+)"/ ) ||
text.match( /flvserver\s*:\s*'([^']+)'/ ) )
var server = RegExp.$1;
if ( text.match( /flv\s*:\s*"([^"]+)"/ ) ||
text.match( /flv\s*:\s*'([^']+)'/ ) )
var flv = RegExp.$1;
if ( flv && text.match( /makesecurl\s*:\s*("|')?false\1/ ) )
var makesecurl = false;
else makesecurl = true;
if ( !flv || !server ) {//embed route
var configurl = "http://vidii.hardsextube.com/video/" + vid + "/confige.xml";
try {
text = craving.getResponseText( configurl );
} catch( e ) {
text = "";
}
if ( text.match( /]*?Name\s*=\s*("|')FLV\2[^>]*)>/i )
&& RegExp.$1.match( /\s+Value\s*=\s*("|')(.*?)\1/i ) )
flv = RegExp.$2;
if ( text.match( /]*?Name\s*=\s*("|')FLVServer\2[^>]*)>/i )
&& RegExp.$1.match( /\s+Value\s*=\s*("|')(.*?)\1/i ) )
server = RegExp.$2;
if ( text.match( /]*?Name\s*=\s*("|')makesecurl\2[^>]*)>/i )
&& RegExp.$1.match( /\s+Value\s*=\s*("|')?false\1/i ) )
makesecurl = false;
else makesecurl = true;
}
if ( !flv || !server ) return null;
if ( makesecurl == true ) flv = decSecurl( flv, server );
var realUrl = server + flv;
if ( !realUrl ) return null;
realUrl = addPrm( realUrl );//not need addPrm
return { videoTitle0: title, videoUrl0: realUrl };
}
function addPrm( realurl ) {
var tip = realurl.substr( 7, 3 );
var ext = realurl.substring( realurl.lastIndexOf( "." ) + 1 ).substr( 0, 3 );
if ( ext == "mp4" && tip != "cdn" && tip != "t.c" ) var prm = "mp4mod=1&start=0";
else "start=0";
if ( realurl.indexOf( "?" ) < 0 ) realurl = realurl + "?" + prm;
else realurl = realurl + "&" + prm;
return realurl;
}
function decSecurl( strFlv, strSvr ) {
var arrQt = strFlv.split( "?" );
if ( arrQt.length < 2 ) return strFlv;
var strEnc = arrQt.pop();
if ( !strEnc ) return strFlv;
var flvpath = arrQt.join( "?" );
strEnc = strEnc.replace( /_pl_/g, "+" ).replace( /_mi_/g, "-" )
.replace( /_dqu_/g, "\"" ).replace( /_qu_/g, "'" );
var arrDec = base64Decode( strEnc );
//var Seed = "mOtherFUCkeRaNalteENk39785raTyIMaNO" + strSvr;
var Seed = "e9L3De4Esc6H794";//2013/01/15
var arrKey = mkKeyArr( Seed );
var len = arrKey.length;
for ( var i = 0; i < arrDec.length; i++ )
arrDec[ i ] = arrDec[ i ] - arrKey[ i % len ]
var strNoise = byteArrToString( arrDec );
var arrTmp = strNoise.split( ":" );
var arrNoise = [];
for ( var i = 0; i < arrTmp.length; i++ ) {
if ( arrTmp[i].match( /^(\d+)$/ ) ) arrNoise.push( parseInt( arrTmp[i], 10 ) );
}
var arrChar = flvpath.split( "" );
for ( var i = 0; i < arrNoise.length; i++ )
arrChar[ arrNoise[ i ] ] = "";
flvpath = arrChar.join( "" );
flvpath = flvpath.replace( /_@\?_/, "?" );
flvpath = flvpath.replace( /_@\?_/g, "&" );
return flvpath;
}
function mkKeyArr( strKey ) {
var arrKey = [];
var len = strKey.length;
for ( var i = 0; i < len; i++ ) {
var pos = i % len - 1;
if ( pos < 0 ) pos = pos + len;
arrKey.push( strKey.charCodeAt( pos ) );
}
return arrKey;
}
/* ************************************************
Dark Knight さんのサイトスクリプト
nantokadoga.site.js (var 0.7) より base64Decode()
array を返すように一部書き換え
************************************************** */
/* 削除、別途用意してください */
function byteArrToString( byteArr ) {
var arr = [];
for ( var i = 0; i < byteArr.length; i++ ) {
arr.push( String.fromCharCode( byteArr[ i ] ) );
}
return arr.join( "" );
}
//public
this.isSiteUrl = isSiteUrl;
this.getVideoDetail = getVideoDetail;
}
/* HardSexTube ここまで */
/* common */
/* base64decode */
// be required pornhub, keezmovies, hardsextube
/*
Dark Knight さんのサイトスクリプト
nantokadoga.site.js (var 0.7) より base64Decode()
array を返すように一部書き換え
*/
function base64Decode( str ) {
var base64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
//var result = '';
var arr = [];
var p = -8;
var a = 0;
var c;
for ( var i = 0; i < str.length; i++ ) {
if ( ( c = base64Table.indexOf( str.charAt( i ) ) ) < 0 ) {
continue;
}
a = ( a << 6 ) | ( c & 63 );
if ( ( p += 6 ) >= 0 ) {
var d = ( a >> p ) & 255;
if ( c != 64 ) {
//result += String.fromCharCode( d );
arr.push( d );
}
a &= 63;
p -= 8;
}
}
//return result;
return arr;
}
/* base64decode ここまで */
/* common ここまで */
/* msgbox */
function clsMsgBox(){
//WScript.Shell Popup
this.isOK = false;
this._objShell = null;
this._initialize = function (){
try{
this._objShell = new ActiveXObject( "WScript.Shell" );
this.isOK = true;
} catch( e ) {
this.isOK = false;
}
}
this._initialize();
this.MsgBox = function ( msg, title, btn ){
if ( btn == undefined ) btn = 1;
//btn=1の時ret: OK:1, キャンセル:2
if ( this.isOK )
return this._objShell.Popup( msg, 0, title, btn+64 );
}
}
/* msgbox */
/* send to CravingExplorer */
function sendCE( strUrl ) {
try {
var objCE = new ActiveXObject( "CravingExplorer.Api" );
var ret = objCE.addDownloadItem( strUrl, 'flv', true );
} catch( e ) {
}
return ret;
}
/* send to CravingExplorer end */