// ==SiteScript== // @siteName PinkBike.com // @siteUrl http://www.pinkbike.com/ // @author mayan // @authorUrl // @scriptUrl // @description // @date 2011/09/25 // @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|#34);/ig, "\"" ) .replace( /&(amp|#38);/ig, "&" ) .replace( /&(apos|#39);/ig, "'" ) .replace( /&(lt|#60);/ig, "<" ) .replace( /&(gt|#62);/ig, ">" ) .replace( /&(nbsp|#160);/ig, " " ) .replace( /&(frasl|#8260);/ig, "/" ); } } function isSiteUrl( url ) { if ( url.match( /http:\/\/(www\.)?pinkbike\.com\/video\/\d+/ ) ) return true; if ( url.match( /http:\/\/(www\.)?pinkbike\.com\/v\/\d+/ ) ) return true; return false; } function getVideoDetail( url ) { var craving = new CravingSiteScript(); if ( url.match( /http:\/\/(www\.)?pinkbike\.com\/(video|v)\/(\d+)/ ) ) var vid = RegExp.$3; else return null; var embedurl = "http://www.pinkbike.com/v/" + vid; try { var objHttp = new ActiveXObject( "WinHttp.WinHttpRequest.5.1" ); objHttp.Open( "HEAD", embedurl, false ); objHttp.Send(); var redirecturl = objHttp.Option( 1 ); } catch( e ) { redirecturl = ""; } var uid = redirecturl.match( /[?&]uid=([^&]+)/ )? decodeURIComponent( RegExp.$1 ): ""; var title = redirecturl.match( /[?&]title=([^&]+)/ )? decodeURIComponent( RegExp.$1 ): ""; var iurl = redirecturl.match( /[?&]i=([^&]+)/ )? decodeURIComponent( RegExp.$1 ): ""; var data = 'rmsD={"mod":"video","op":"gv","ref":"' + ( uid? "": "norefer" ) + '","id":"' + vid + '","uid":"' + ( uid? uid: "9" ) + '"}&rmsP=j1'; data = encodeURI( data ); var rmsurl = "http://www.pinkbike.com/rms/"; try { var objJson = craving.getResponseJSON( rmsurl, data, "POST" ); var realUrl = objJson.rmsD.sUrl.replace( /\\\//g, "/" ); } catch( e ) { realUrl = ""; } if ( ( !realUrl && !iurl ) || !title ) { var pageurl = "http://www.pinkbike.com/video/" + vid + "/"; try { var text = craving.getResponseText( pageurl ); } catch( e ) { text = ""; } if ( text ) { if ( !title && text.match( /