// ==UserScript==
// @name dcinside_lite
// @namespace http://kasugano.tistory.com
// @version 1.0
// @date 2014.09.22
// @author 축 -> 하루카나소라
// @description 디시인사이드 갤러리를 깔끔하게 볼 수 있고, 몇 가지 유용한 기능도 사용할 수 있습니다.
// @include http://tvple.com/*
// @require https://ssl-proxy.dcmys.kr/api/fw.js
// @run-at document-end
// ==/UserScript==
var _VERSION = '2.40902';
var main = function() {
if(!/^\/[0-9]+$/.test(location.pathname))
return;
var target = $('div#play')?$('div#play'):$('object#player')?$('object#player'):null;
if(!target)
return alert('HTML5 플레이어 초기화 중 오류가 발생했습니다.\n\n삽입 지점을 찾을 수 없음');
cElement('style', document.head, {'type':'text/css', 'textContent':'div.html5-player { width: 100%; height: 540px; }'});
var playerDiv = cElement('div', [target,'replace'], {'className':'html5-player'});
var keyReg = /flashvars\.key = \'([^\']+)\'/;
if(!keyReg.test(document.body.innerHTML))
return;
var data = keyReg.exec(document.body.innerHTML)[1];
if(!data)
return "KEY가 올바르지 않습니다.";
data = parseKey(data);
if(!data)
return "KEY가 올바르지 않습니다.";
/*
data2 =>
[0] => 버전 (in float)
[1] => bgColor (in byte[6])
[2] => crossdomain.xml URL (in string)
[3] => info xml URL (in string)
[4] => AutoPlay (in boolean)
*/
var data2 = data.split("\n");
if(data2[0] != _VERSION)
{
return "서버와 호환되지 않습니다.
페이지를 새로고침 해보세요!
서버: " + data2[0];
}
playerDiv.style.backgroundColor = '#' + data2[1];
console.log(data2);
simpleRequest(
data2[3],
function(r) {
var xmlText = parseKey(r.responseText);
videoinfo=new X2JS().xml_str2json(xmlText,"text/xml");
var playerVid = cElement('video', playerDiv, {'width':'100%','height':'100%','controls':'controls','poster':videoinfo['tvple']['video']['preview']['url']});
cElement('source', playerVid, {'type':'video/mp4','src':videoinfo['tvple']['video']['url']});
});
};
var parseKey = function(q) {
if(q.substr(0,4) != 'feff' || q.substr(20,1) != '_') {
return false;
}
var subtbl = q.substr(69,16).split("");
return HexToStr(q.substr(125).split("").reverse().join("").replace(new RegExp(subtbl[5],"g"),"g").replace(new RegExp(subtbl[4],"g"),"h").replace(new RegExp(subtbl[3],"g"),"i").replace(new RegExp(subtbl[2],"g"),"j").replace(new RegExp(subtbl[1],"g"),"k").replace(new RegExp(subtbl[6],"g"),subtbl[5]).replace(new RegExp(subtbl[7],"g"),subtbl[4]).replace(new RegExp(subtbl[8],"g"),subtbl[3]).replace(new RegExp(subtbl[9],"g"),subtbl[2]).replace(new RegExp(subtbl[10],"g"),subtbl[1]).replace(new RegExp("g","g"),subtbl[6]).replace(new RegExp("h","g"),subtbl[7]).replace(new RegExp("i","g"),subtbl[8]).replace(new RegExp("j","g"),subtbl[9]).replace(new RegExp("k","g"),subtbl[10]));
}
var HexToStr = function (hex) {
var hex = hex.toString();
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
function loadScript(url, callback)
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onreadystatechange = callback;
script.onload = callback;
head.appendChild(script);
}
if(typeof simpleRequest == 'undefined')
loadScript('https://ssl-proxy.dcmys.kr/api/fw.js', main);
else
main();