|
阅读:3077回复:5
请教关于新浪视频的老问题
请问怎样才可以看新浪视频?记得好像以前有一个greasemonkey的插件可以实现,但是现在找不到相关的内容了,麻烦解答一下,谢谢!
|
|
|
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); |
|
|
|
2楼#
发布于:2007-04-19 14:08
我按上面的脚本编了一个user.js,但是还是看不了新浪的视频
|
|
|
3楼#
发布于:2007-04-19 14:08
请问还有什么解决办法吗?
|
|
|
4楼#
发布于:2007-04-19 14:08
我贴的那个就是原来的脚本 现在新浪视频换了当然就无效了,暂时没有看到有什么好的方法
|
|
|
|
5楼#
发布于:2007-04-19 14:08
谢谢楼主了,用ie tab 算了,但是麻烦点
|
|