bssln
火狐狸
火狐狸
  • UID18114
  • 注册日期2007-04-19
  • 最后登录2018-02-08
  • 发帖数115
  • 经验29枚
  • 威望0点
  • 贡献值26点
  • 好评度3点
  • 社区居民
阅读:3008回复:5

请教关于新浪视频的老问题

楼主#
更多 发布于:2007-04-19 14:08
请问怎样才可以看新浪视频?记得好像以前有一个greasemonkey的插件可以实现,但是现在找不到相关的内容了,麻烦解答一下,谢谢!
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2025-08-21
  • 发帖数18502
  • 经验4858枚
  • 威望5点
  • 贡献值4324点
  • 好评度1118点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
1楼#
发布于:2007-04-19 14:08
那个对新版新浪视频好像无效了。
// ==UserScript==
// @name              Sina Video
// @author            sunwan
// @e-mail            bws@cnnj.8866.org
// @version           0.1.5
// @description       Show video in sina.com.cn
// @namespace         http://www.cnnj.8866.org/mozilla/greasemonkey/
// @include           http://*.sina.com.cn/*
// ==/UserScript==

/*
* JScript.encode decoder
* modified from scrdec18.c.
* scrdec1x.c is copyright(c) Mr.Brownstone <mrbrownstone@virtualconspiracy.com>
* http://www.virtualconspiracy.com/scrdec.html
*/

function JScriptDecoder() {
	this.init();
}

JScriptDecoder.prototype = {
	STATE_COPY_INPUT:		100,
	STATE_READLEN:			101,
	STATE_DECODE:			102,
	STATE_UNESCAPE:			103,

	pick_encoding: [
		1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0,
		1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2,
		1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2,
		1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2
	],

	rawData: [
		0x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72,
		0x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C,
		0x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43,
		0x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63,
		0x7A,0x26,0x4A, 0x21,0x54,0x5A, 0x46,0x71,0x38, 0x20,0x2B,0x79,
		0x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B,
		0x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D,
		0x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F,
		0x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E,
		0x5A,0x2F,0x3B, 0x66,0x39,0x47, 0x32,0x33,0x41, 0x73,0x6F,0x77,
		0x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78,
		0x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67,
		0x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22,
		0x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A,
		0x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C,
		0x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25,
		0x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28,
		0x6D,0x5E,0x31, 0x4E,0x5B,0x39, 0x2B,0x6E,0x7F, 0x30,0x57,0x36,
		0x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E,
		0x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09,
		0x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D,
		0x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37,
		0x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E,
		0x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F
	],

	init: function() {
		this.transformed = this.digits = [];
		
		for (var i=0; i<3; i++)
			this.transformed[i] = [];
		for (var i=31; i<=126; i++)
			for (var j=0; j<3; j++)
				this.transformed[j][this.rawData[(i-31) * 3 + j]] = (i==31) ? 9 : i;

		for (var i=0; i<26; i++) {
			this.digits["A".charCodeAt(0)+i] = i;
			this.digits["a".charCodeAt(0)+i] = i + 26;
		}
		for (var i=0; i<10; i++)
			this.digits["0".charCodeAt(0)+i] = i + 52;
		this.digits[0x2b] = 62;
		this.digits[0x2f] = 63;
	},
	
	unescape: function(aChar) {
		var escapes = "#&!*$";
		var escaped = "\r\n<>@";

		if (aChar.charCodeAt(0) > 126)
			return aChar;
		var index = escapes.indexOf(aChar);
		if (index != -1)
			return escaped.substr(index, 1);
		return "?";
	},
	
	decodeBase64: function(sData) {
		var val = 0;
		val +=  (this.digits[sData.substr(0,1).charCodeAt(0)] << 2);
		val +=  (this.digits[sData.substr(1,1).charCodeAt(0)] >> 4);
		val +=  (this.digits[sData.substr(1,1).charCodeAt(0)] & 0xf) << 12;
		val += ((this.digits[sData.substr(2,1).charCodeAt(0)] >> 2) << 8);
		val += ((this.digits[sData.substr(2,1).charCodeAt(0)] & 0x3) << 22);
		val +=  (this.digits[sData.substr(3,1).charCodeAt(0)] << 16);
		return val;
	},

	decode: function(sData) {
		
		var marker = "#@~^";
		var sIndex = 0;
		var index = -1;
		var unEcdIndex = 0;
		var aChar = null;
		var ecdLen = 0;
		var unEcdLen = 0;
		var state = this.STATE_COPY_INPUT;
		var unEcdStr = "";
		
		while (state) {
			switch (state) {
				case this.STATE_COPY_INPUT:
					index = sData.indexOf(marker, sIndex);
					if (index != -1) {
						unEcdStr += sData.substring(sIndex, index);
						index += marker.length;
						state = this.STATE_READLEN;
					}
					else {
						unEcdStr += sData.substr(sIndex, sData.length);
						state = 0;
					}
					break;
				
				case this.STATE_READLEN:
					ecdLen = sData.substr(index, 6);
					unEcdLen = this.decodeBase64(ecdLen);
					index += 8;
					state = this.STATE_DECODE;
					break;
					
				case this.STATE_DECODE:
					if (!unEcdLen) {
						sIndex = index + "f28AAA==^#~@".length;
						unEcdIndex = 0;
						state = this.STATE_COPY_INPUT;
						state = 0;
						break;
					}
					aChar = sData.substr(index, 1);
					if (aChar == "@")
						state = this.STATE_UNESCAPE;
					else {
						if (aChar.charCodeAt(0) < 0xFF) {
							unEcdStr += String.fromCharCode(this.transformed[this.pick_encoding[unEcdIndex%64]][aChar.charCodeAt(0)]);
							unEcdIndex++;
						}
						else {
							unEcdStr += aChar;
						}						
						index++;
						unEcdLen--;
						break;
					}
					
				case this.STATE_UNESCAPE:
					unEcdStr += this.unescape(sData.substr(++index, 1));
					index++;
					unEcdLen -=2;
					unEcdIndex++;
					state = this.STATE_DECODE;
					break;
			}
		}
		return unEcdStr;
	}
}
// end decoder

var configUseBroadFile = GM_getValue("configUseBroadFile", true);
var configStopAutoStart = GM_getValue("configStopAutoStart", true);

function saveConfig1() {
	GM_setValue("configUseBroadFile", !GM_getValue("configUseBroadFile",true));
	window.location.reload();
}
function saveConfig2() {
	GM_setValue("configStopAutoStart", !GM_getValue("configStopAutoStart",true));
	window.location.reload();
}

if (configUseBroadFile) {
	GM_registerMenuCommand(" (?q髧?, saveConfig1 );
	mediaFile = "broadFile";
}
else {
	GM_registerMenuCommand("   (?q髧?, saveConfig1 );
	mediaFile = "narrowFile";
}

if (configStopAutoStart) {
	GM_registerMenuCommand(" 乥戗?", saveConfig2 );
	autoStart = "0";
}
else {
	GM_registerMenuCommand("   乥戗?", saveConfig2 );
	autoStart = "1";
}

var mediaFile, autoStart;
var hasVideoPlayer = hasRadio = hasMediaFile = hasMoreMedia = needReplace = find = false;

function findPlayer() {
	var src, text;
	var sc = document.getElementsByTagName("script");
	for (var i = 0; i < sc.length; i++)	{
		src = sc[i].getAttribute("src");
		if (src && !hasVideoPlayer && /(?:Media|Audio)Player\.js$/.test(src)) {
			sc[i].id = "greasemonkey_sinavideo";
			hasVideoPlayer = true;
			findMoreMedia(sc[i]);
			break;
		}
		else if (src && !hasRadio && /radiolist\.js$/.test(src)) {
			hasRadio = true;
			break;
		}
		else if (sc[i].getAttribute("language") && 
				sc[i].getAttribute("language").toLowerCase() == 'jscript.encode') {
			text = decoder.decode(getScriptText(sc[i]));
			if (text.indexOf('var LINK = new Array("') > -1) {
				reloadAudioPlayer(sc[i], text);
				break;
			}
		}
	}
}

function findMoreMedia(aNode) {
	var tr = aNode.parentNode;
	while (tr && tr.nodeName != "TR")
		tr = tr.parentNode;
	if (!tr) return;
	var nextTr = tr.nextSibling;
	while (nextTr && nextTr.nodeName != "TR")
		nextTr = nextTr.nextSibling;
	if (!nextTr) return;
	var links = nextTr.getElementsByTagName("a");
	var href;
	for (var i = 0; i < links.length; i++) {
		href = links[i].href;
		if (href && /javascript:Chg(?:BN|Video)\([^\)]+\)/.test(href)) {
			hasMoreMedia = true;
			break;
		}
	}
}

function findMediaFile() {
	var text;
	var sc = document.getElementsByTagName("script");
	for (var i = 0; i < sc.length; i++)	{
		if (sc[i].getAttribute("language") && 
				sc[i].getAttribute("language").toLowerCase() == 'jscript.encode') {
			text = decoder.decode(getScriptText(sc[i]));
			needReplace = true;
		}
		else
			text = getScriptText(sc[i]);
				
		if (!hasMediaFile && (text.indexOf("var vWidth =") > -1 || text.indexOf("var broadFile =") > -1)) {
			if (text.indexOf("broadFile") == -1) {
				text += 'var broadFile = list[0][0];var narrowFile = list[0][1];';
				needReplace = true;
			}
			hasMediaFile = true;
			if (!hasMoreMedia) find = true;
		}
		else if (text.indexOf('bvideo[1]="') > -1) {
			find = true;
		}
		if (needReplace) {
			sc[i].parentNode.replaceChild(createNewScript(text),sc[i]);
			needReplace = false;
		}
		if (find) break;
	}
}

function createNewScript(str) {
	var nScript = document.createElement("script");
	nScript.setAttribute( "language", "javascript" );
	nScript.innerHTML = str;
	return nScript;
}

function getScriptText(oNode) {
	var s = "";
	var cs = oNode.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		if ( cs[i].nodeType == 3 ) {	//TEXT_NODE
		s += cs[i].nodeValue;
		}
	}
	return s;
}

var fn1 = function() {
	function insertVideo(src,aStart,wdh,hgt) {
		var div = document.getElementById("greasemonkey_sinavideodiv");
		var emb = div.getElementsByTagName("embed")[0];
		if (emb) div.removeChild(emb);
		
		div.innerHTML = '<embed width="' + wdh +
						'" height="' + (parseInt(hgt) + 67).toString() +
						'" src="' + src +
						'" type="application/x-mplayer2" ' +
						'autostart="' + aStart +
						'" showcontrols="1" showstatusbar="1">';
	}
	
	if (typeof vWidth == "undefined") var vWidth = "320";
	if (typeof vHeight == "undefined") var vHeight = "240";
	if (!broadFile) broadFile = narrowFile;
	if (!narrowFile) narrowFile = broadFile;
	var vSpt = document.getElementById("greasemonkey_sinavideo");
	var gmDiv = document.createElement("div");
	gmDiv.id = "greasemonkey_sinavideodiv";
	var parent = vSpt.parentNode;
	parent.insertBefore(gmDiv, vSpt);
	while (vSpt.nextSibling && vSpt.nextSibling.nodeName !="SCRIPT")
		parent.removeChild(vSpt.nextSibling);

	insertVideo("#MEDIAFILE#","#AUTOSTART#",vWidth,vHeight);
}

var fn2 = function() {
	function ChgBN(bFile,nFile) {
		broadFile = bFile;
		narrowFile = nFile;
		if (!broadFile) broadFile = narrowFile;
		if (!narrowFile) narrowFile = broadFile;
		insertVideo("#MEDIAFILE#","1",vWidth,vHeight);
	}

	function ChgVideo(bFile) {
		broadFile = narrowFile = bFile;
		insertVideo("#MEDIAFILE#","1",vWidth,vHeight);
	}
}

var fn3 = function() {
	function ChgAudio(id) {
		var filename = aRadio[id][4];
		var origPlayer = document.getElementById("MediaPlayer");
		if (!origPlayer) return;
		var aWidth = origPlayer.width;
		var aHeight = origPlayer.height;
		var parent = origPlayer.parentNode;
		parent.removeChild(origPlayer);
		parent.innerHTML = '<embed id="MediaPlayer"'+
						' width="' + aWidth +
						'" height="' + aHeight +
						'" src="' + filename +
						'" type="application/x-mplayer2" ' +
						'autostart="1" showcontrols="1" showstatusbar="1">';
	}
}

function reloadAudioPlayer(aSc, text) {
	text = text.replace(/(function\s+\w+\s*\(\s*\)\{)/g,
			"$1\n"+
			"var div = document.createElement('div');\n"+
			"var theSc = document.getElementById('greasemonkey_sinaaudio');\n"+
			"theSc.parentNode.insertBefore(div, theSc.nextSibling);\n"+
			"var str = '';\n"
			).replace(/document\.write(?:ln)?\s*\(([^;]+)\);/g,
			"str += "+"$1"+";"
			).replace(/document\.close\s*\(\s*\);/g,
			"div.innerHTML = str;");
	nSc = createNewScript(text);
	nSc.id = "greasemonkey_sinaaudio";
	aSc.parentNode.replaceChild(nSc, aSc);
}

function execScript(f) {
	var str = f.toString();
	str = str.substring( str.indexOf('{')+1, str.lastIndexOf('}') );
	str = str.replace(/"#MEDIAFILE#"/g, mediaFile).replace(/#AUTOSTART#/g, autoStart);

	var nScript = createNewScript(str);

	var bd = document.body;
	if (bd) {
		bd.appendChild( nScript );
		bd.removeChild( nScript );
	}
	else {
		var h = document.getElementsByTagName("head")[0];
		h.appendChild( nScript );
		h.removeChild( nScript );
	}
}

// Decode JScript.encode
var decoder = new JScriptDecoder();
findPlayer();
if (hasVideoPlayer) findMediaFile();
if (hasMediaFile) execScript(fn1);
if (hasMoreMedia) execScript(fn2);
if (hasRadio) execScript(fn3);
Firefox More than meets your experience
bssln
火狐狸
火狐狸
  • UID18114
  • 注册日期2007-04-19
  • 最后登录2018-02-08
  • 发帖数115
  • 经验29枚
  • 威望0点
  • 贡献值26点
  • 好评度3点
  • 社区居民
2楼#
发布于:2007-04-19 14:08
我按上面的脚本编了一个user.js,但是还是看不了新浪的视频
bssln
火狐狸
火狐狸
  • UID18114
  • 注册日期2007-04-19
  • 最后登录2018-02-08
  • 发帖数115
  • 经验29枚
  • 威望0点
  • 贡献值26点
  • 好评度3点
  • 社区居民
3楼#
发布于:2007-04-19 14:08
请问还有什么解决办法吗?
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2025-08-21
  • 发帖数18502
  • 经验4858枚
  • 威望5点
  • 贡献值4324点
  • 好评度1118点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
4楼#
发布于:2007-04-19 14:08
我贴的那个就是原来的脚本 现在新浪视频换了当然就无效了,暂时没有看到有什么好的方法
Firefox More than meets your experience
bssln
火狐狸
火狐狸
  • UID18114
  • 注册日期2007-04-19
  • 最后登录2018-02-08
  • 发帖数115
  • 经验29枚
  • 威望0点
  • 贡献值26点
  • 好评度3点
  • 社区居民
5楼#
发布于:2007-04-19 14:08
谢谢楼主了,用ie tab 算了,但是麻烦点
游客

返回顶部