/* @title nicoLivew
* @description ニコニコ生放送のプレイヤーだけ抜き出したりとかするやつ
* @description http://ch.nicovideo.jp/star/blomaga/ar303976
* @description ギッタァブでも管理してます https://github.com/uzuky/nicoLivew
* @license MIT License
*/
javascript:!function() {
var loc = document.location.href,
div = document.createElement('div'),
day = 'v20160218',
ver = '' + day + '';
switch (true) {
//いつもの放送ページの処理
case /live\.nicovideo\.jp\/watch/.test(loc): {
//ここ仕様変更に弱そう
var url = document.querySelector('meta[property="al:web:url"]'),
//放送IDを取得
liveId = url.outerHTML.replace(/.+?watch\/(lv\d+).*/, '$1'),
Aries = '',
delButton = 'var f = "flvplayer_container",flv = document.getElementById(f);flv.parentNode.removeChild(flv);';
//放送主かどうか
//ログインしてるユーザーIDを取得
var myUserIdSource = document.getElementById('siteHeaderNotification');
if (!myUserIdSource) {
var myUserId = '0',
message = '
ユーザー ID が取得できなかったため放送者モードで表示しています。
(配信ツールなどは視聴者側が操作することはできません)
不具合か仕様変更の可能性があるので
上のバージョン番号をクリックした先の記事か
Twitterまで連絡くださるとなるべく早く直します。 ';
} else {
var myUserId = myUserIdSource.outerHTML.replace(/[\s\S]+data\-nico\-userid="(\d+)"[\s\S]*/, '$1'),
message = '';
}
//放送主のユーザーIDを取得(表示がない放送は0)
var liveUserIdSource = document.querySelector('.nicopedia_nushi');
if (!liveUserIdSource) {
var liveUserId = 0;
} else {
var liveUserId = liveUserIdSource.outerHTML.replace(/[\s\S]+nicovideo.jp\/user\/(\d+)[\s\S]+/, '$1');
}
//ログインしてるユーザーIDと放送主のユーザーIDを比較
console.log(myUserIdSource.outerHTML);
if (myUserId != liveUserId) {
var nushi = 'N';
} else {
var nushi = 'Y';
}
break;
//新しい放送ページ(?)の処理
} case /live2\.nicovideo\.jp\/watch/.test(loc): {
var liveId = loc.replace(/.+?watch\/(lv\d+).*/, '$1'),
scripts = document.getElementsByTagName('script');
//ソースから flash に渡すパラメータの部分を取得
var i = 0;
while (scripts[i] != null) {
if (/.+flashVars.+/.test(scripts[i].outerHTML)) {
var flashParam = scripts[i].outerHTML;
break;
}
//console.log(scripts[i]);
++i;
}
if (flashParam == null) {
alert('flashParam が取得できませんでした(◞‸◟)\nこのページのURL「' + loc + '」\n連絡先とか http://nico.ms/ar303976\nTwitter@uzuky');
}
var p = flashParam.replace(/[\s\u2028\u2029]/g,''),
//URL のパラメータ
swf = p.replace(/.*?swf:"(http:.+?AriesPlayer\.swf)".*/,'$1?'),
ws0 = p.replace(/.*?"(webSocketUrl)".+?"([\w\W]+?)".*/,'&$1=$2'),
ws = ws0.replace(/\\\//g,'/'),
ot = p.replace(/.*?"(openTime)".+?"(\w+)".*/,'&$1=$2'),
at = p.replace(/.*?"(audienceToken)".+?"(\w+)".*/,'&$1=$2'),
ec = "&enableClientLog=1",
bt = p.replace(/.*?"(beginTime)".+?"(\d+)".*/,'&$1=$2'),
rn = p.replace(/.*?"(relatedNicoliveProgramId)".+?"(\w+)".*/,'&$1=$2'),
bi = p.replace(/.*?"(broadcastId)".+?"(\d+)".*/,'&$1=$2'),
pi = p.replace(/.*?"(programId)".+?"(\d+)".*/,'&$1=$2');
var Aries = '
',
delButton = 'var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);',
nushi = 'N';
break;
//それ以外のページの処理
} default: {
var liveId = prompt('放送IDかURL', '');
if (liveId.match(/lv[0-9]+/)) {
var liveId = liveId.replace(/.+?(lv\d+).*/, '$1'),
Aries = '',
delButton = '',
nushi = 'Y';
} else {
alert('放送IDが入ってないよ!\n「' + liveId + '」\n連絡先とか http://nico.ms/ar303976\nTwitter@uzuky');
return false;
}
break;
}}
//放送主だったら追加
if (nushi == 'Y') {
var nama1 = '放送主用
',
nama2 = '
※"かんたん配信"タブを複数のウィンドウで操作すると
うまく動作してくれないことがあるので
注意してください
※放送情報変更の反映は少し時間がかかります
';
} else {
var nama1 = '',
nama2 = '';
}
//ページに追加
div.innerHTML = '×プレイヤー抜き出し
' + Aries + '
' + nama1 + nama2 + ver + message;
div.style.color = 'rgb(250,250,250)';
div.style.textAlign = 'center';
div.style.padding = '10px';
div.style.position = 'fixed';
div.style.zIndex = '9999';
div.style.fontSize = '12px';
div.style.border = '2px solid black';
div.style.right = '20px';
div.style.bottom = '20px';
div.style.background = 'rgba(0,128,255,0.5)';
div.setAttribute("id", "nicoLivew");
document.body.appendChild(div);
}();