nicoLivew
by
uzuky
2018-02-19 [2018/02/19 21:59:39]
ニコニコ生放送のプレイヤーだけ抜き出したりとかするやつ
@@ -9,26 +9,23 @@
javascript:!function() {
var loc = document.location.href,
div = document.createElement('div'),
- day = 'v20160218',
+ day = 'v20180219',
ver = '<small><a href="http://nico.ms/ar303976" target="_blank" title="support" style="position:relative; top:5px; background-color:rgba(255,255,255,0.4);">' + day + '</a></small>';
switch (true) {
//いつもの放送ページの処理
case /live\.nicovideo\.jp\/watch/.test(loc): {
//ここ仕様変更に弱そう
- var url = document.querySelector('meta[property="al:web:url"]'),
+ var url = document.querySelector('meta[property="al:web:url"]');
//放送IDを取得
- liveId = url.outerHTML.replace(/.+?watch\/(lv\d+).*/, '$1'),
- Aries = '',
+ liveId = url.outerHTML.replace(/.+?watch\/(lv\d+).*/, '$1');
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 = '<div style="margin-top:5px; color:rgb(0,0,0);"><small>ユーザー ID が取得できなかったため放送者モードで表示しています。<br>(配信ツールなどは視聴者側が操作することはできません)<br>不具合か仕様変更の可能性があるので<br>上のバージョン番号をクリックした先の記事か<br><a href="https://twitter.com/uzuky" target="_blank" style=" background-color:rgba(255,255,255,0.4);">Twitter</a>まで連絡くださるとなるべく早く直します。</small></div>';
+ var myUserId = '0';
} else {
- var myUserId = myUserIdSource.outerHTML.replace(/[\s\S]+data\-nico\-userid="(\d+)"[\s\S]*/, '$1'),
- message = '';
+ var myUserId = myUserIdSource.outerHTML.replace(/[\s\S]+data\-nico\-userid="(\d+)"[\s\S]*/, '$1');
}
//放送主のユーザーIDを取得(表示がない放送は0)
var liveUserIdSource = document.querySelector('.nicopedia_nushi');
@@ -44,70 +41,74 @@
} else {
var nushi = 'Y';
}
- break;
+ 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');
+// こんなものはない
+// } 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\nfriends.nico@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 = '<input type="button" value="Aries" onClick="window.open(\'' + swf + ws + ot + at + ec + bt + rn + bi + pi + '\',\'_blank\',\'width=960,height=512\');var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);"><br>',
- delButton = 'var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);',
- nushi = 'N',
- message = '';
- break;
+// var Aries = '<input type="button" value="Aries" onClick="window.open(\'' + swf + ws + ot + at + ec + bt + rn + bi + pi + '\',\'_blank\',\'width=960,height=512\');var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);"><br>',
+// delButton = 'var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);',
+// nushi = 'N',
+// break;
+ } case /live2\.nicovideo\.jp\/watch/.test(loc): {
+ var liveId = loc.replace(/.+?watch\/(lv\d+).*/, '$1');
+ delButton = '';
+ nushi = 'Y';
+ break;
//それ以外のページの処理
} default: {
var liveId = prompt('放送IDかURL', '');
if (liveId.match(/lv[0-9]+/)) {
- var liveId = liveId.replace(/.+?(lv\d+).*/, '$1'),
- Aries = '',
- delButton = '',
+ var liveId = liveId.replace(/.+?(lv\d+).*/, '$1');
+ delButton = '';
nushi = 'Y';
} else {
- alert('放送IDが入ってないよ!\n「' + liveId + '」\n連絡先とか http://nico.ms/ar303976\nTwitter@uzuky');
+ alert('lvで始まる放送IDが入ってないよ!\n「' + liveId + '」\n連絡先とか http://nico.ms/ar303976\nfriends.nico@uzuky');
return false;
}
- break;
+ break;
}}
//放送主だったら追加
if (nushi == 'Y') {
- var nama1 = '<b>放送主用</b><br><input type="button" value="配信ツール" onClick="window.open(\'http://live.nicovideo.jp/nicolivebroadcaster.swf?dicfilename=NicoliveBroadcasterDictionaryJAJP.swf&v=' + liveId + '\',\'_blank\',\'width=900,height=250\')"><input type="button" value="放送情報変更" onClick="window.open(\'http://live.nicovideo.jp/editstream/' + liveId + '\',\'_blank\',\'width=960,height=600,scrollbars=1\')"><br><input type="button" value="配信ツール(原宿)" onClick="window.open(\'http://live.nicovideo.jp/utility_v1.swf?v=' + liveId + '\',\'_blank\',\'width=950,height=200\')"> ',
- nama2 = '<small><b><br>※"かんたん配信"タブを複数のウィンドウで操作すると<br>うまく動作してくれないことがあるので<br>注意してください<br>※放送情報変更の反映は少し時間がかかります</b></small><br>';
+ var nama1 = '<div style="background: rgba(0, 0, 0, 0.3);"><b>放送主用</b><br><input type="button" value="放送情報変更" onClick="window.open(\'http://live.nicovideo.jp/editstream/' + liveId + '\',\'_blank\',\'width=960,height=600,scrollbars=1\')"><input type="button" value="配信ツール" onClick="window.open(\'http://live.nicovideo.jp/nicolivebroadcaster.swf?dicfilename=NicoliveBroadcasterDictionaryJAJP.swf&v=' + liveId + '\',\'_blank\',\'width=900,height=250\')"><br><input type="button" value="配信ツール(原宿)" onClick="window.open(\'http://live.nicovideo.jp/utility_v1.swf?v=' + liveId + '\',\'_blank\',\'width=950,height=200\')"> </div>',
+ nama2 = '<small><b>※"配信ツール"は正常に動作するか現在不明です。<br>※放送情報変更の反映は少し時間がかかります。<br>※放送主用は放送主のみ使えます。<br>※HTML5版の対応予定はないです。</b></small><br>';
} else {
var nama1 = '',
nama2 = '';
}
//ページに追加
- div.innerHTML = '<div><b><span title="閉じる" onClick="var c = "nicoLivew",close = document.getElementById(c);close.parentNode.removeChild(close);" style="float:right; cursor:pointer; font-size:large; position:relative; bottom:10px; left:5px;">×</span><span title="!?" onClick="' + delButton + '" style="cursor:default;">プレイヤー抜き出し</span></b></div>' + Aries + '<span style="white-space:nowrap;"><input type="button" value="GINZA" onClick="window.open(\'http://live.nicovideo.jp/nicoliveplayer.swf?v=' + liveId + '&languagecode=ja-jp\',\'_blank\',\'width=960,height=490\');' + delButton + '"><input type="button" value="ニコファーレ" onClick="window.open(\'http://live.nicovideo.jp/liveplayer_farre.swf?v=' + liveId + '\',\'_blank\',\'width=960,height=520\');' + delButton + '"></span><br><input type="button" value="原宿" onClick="window.open(\'http://live.nicovideo.jp/liveplayer.swf?v=' + liveId + '\',\'_blank\',\'width=950,height=520\');' + delButton + '"><input type="button" value="ページ更新" onClick="window.location.reload(true)"><br>' + nama1 + nama2 + ver + message;
+ div.innerHTML = '<div><b><span title="閉じる" onClick="var c = "nicoLivew",close = document.getElementById(c);close.parentNode.removeChild(close);" style="float:right; cursor:pointer; font-size:large; position:relative; bottom:10px; left:5px;">×</span><span title="!?" onClick="' + delButton + '" style="cursor:default;">プレイヤー抜き出し</span></b></div><span style="white-space:nowrap;"><input type="button" value="GINZA" onClick="window.open(\'http://live.nicovideo.jp/nicoliveplayer.swf?v=' + liveId + '&languagecode=ja-jp\',\'_blank\',\'width=960,height=490\');' + delButton + '"><input type="button" value="原宿" onClick="window.open(\'http://live.nicovideo.jp/liveplayer.swf?v=' + liveId + '\',\'_blank\',\'width=950,height=520\');' + delButton + '"></span><br><input type="button" value="ニコファーレ" onClick="window.open(\'http://live.nicovideo.jp/liveplayer_farre.swf?v=' + liveId + '\',\'_blank\',\'width=960,height=520\');' + delButton + '"><br><input type="button" value="ページ更新してリセット" onClick="window.location.reload(true)"><br>' + nama1 + nama2 + ver;
div.style.color = 'rgb(250,250,250)';
div.style.textAlign = 'center';
div.style.padding = '10px';
@@ -117,7 +118,7 @@
div.style.border = '2px solid black';
div.style.right = '20px';
div.style.bottom = '20px';
- div.style.background = 'rgba(0,128,255,0.5)';
+ div.style.background = 'rgba(0,120,240,0.5)';
div.setAttribute("id", "nicoLivew");
document.body.appendChild(div);
-}();
+}();
/* @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 = 'v20180219',
ver = '<small><a href="http://nico.ms/ar303976" target="_blank" title="support" style="position:relative; top:5px; background-color:rgba(255,255,255,0.4);">' + day + '</a></small>';
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');
delButton = 'var f = "flvplayer_container",flv = document.getElementById(f);flv.parentNode.removeChild(flv);';
//放送主かどうか
//ログインしてるユーザーIDを取得
var myUserIdSource = document.getElementById('siteHeaderNotification');
if (!myUserIdSource) {
var myUserId = '0';
} else {
var myUserId = myUserIdSource.outerHTML.replace(/[\s\S]+data\-nico\-userid="(\d+)"[\s\S]*/, '$1');
}
//放送主のユーザー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\nfriends.nico@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 = '<input type="button" value="Aries" onClick="window.open(\'' + swf + ws + ot + at + ec + bt + rn + bi + pi + '\',\'_blank\',\'width=960,height=512\');var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);"><br>',
// delButton = 'var f = "playerswf",flv = document.getElementById(f);flv.parentNode.removeChild(flv);',
// nushi = 'N',
// break;
} case /live2\.nicovideo\.jp\/watch/.test(loc): {
var liveId = loc.replace(/.+?watch\/(lv\d+).*/, '$1');
delButton = '';
nushi = 'Y';
break;
//それ以外のページの処理
} default: {
var liveId = prompt('放送IDかURL', '');
if (liveId.match(/lv[0-9]+/)) {
var liveId = liveId.replace(/.+?(lv\d+).*/, '$1');
delButton = '';
nushi = 'Y';
} else {
alert('lvで始まる放送IDが入ってないよ!\n「' + liveId + '」\n連絡先とか http://nico.ms/ar303976\nfriends.nico@uzuky');
return false;
}
break;
}}
//放送主だったら追加
if (nushi == 'Y') {
var nama1 = '<div style="background: rgba(0, 0, 0, 0.3);"><b>放送主用</b><br><input type="button" value="放送情報変更" onClick="window.open(\'http://live.nicovideo.jp/editstream/' + liveId + '\',\'_blank\',\'width=960,height=600,scrollbars=1\')"><input type="button" value="配信ツール" onClick="window.open(\'http://live.nicovideo.jp/nicolivebroadcaster.swf?dicfilename=NicoliveBroadcasterDictionaryJAJP.swf&v=' + liveId + '\',\'_blank\',\'width=900,height=250\')"><br><input type="button" value="配信ツール(原宿)" onClick="window.open(\'http://live.nicovideo.jp/utility_v1.swf?v=' + liveId + '\',\'_blank\',\'width=950,height=200\')"> </div>',
nama2 = '<small><b>※"配信ツール"は正常に動作するか現在不明です。<br>※放送情報変更の反映は少し時間がかかります。<br>※放送主用は放送主のみ使えます。<br>※HTML5版の対応予定はないです。</b></small><br>';
} else {
var nama1 = '',
nama2 = '';
}
//ページに追加
div.innerHTML = '<div><b><span title="閉じる" onClick="var c = "nicoLivew",close = document.getElementById(c);close.parentNode.removeChild(close);" style="float:right; cursor:pointer; font-size:large; position:relative; bottom:10px; left:5px;">×</span><span title="!?" onClick="' + delButton + '" style="cursor:default;">プレイヤー抜き出し</span></b></div><span style="white-space:nowrap;"><input type="button" value="GINZA" onClick="window.open(\'http://live.nicovideo.jp/nicoliveplayer.swf?v=' + liveId + '&languagecode=ja-jp\',\'_blank\',\'width=960,height=490\');' + delButton + '"><input type="button" value="原宿" onClick="window.open(\'http://live.nicovideo.jp/liveplayer.swf?v=' + liveId + '\',\'_blank\',\'width=950,height=520\');' + delButton + '"></span><br><input type="button" value="ニコファーレ" onClick="window.open(\'http://live.nicovideo.jp/liveplayer_farre.swf?v=' + liveId + '\',\'_blank\',\'width=960,height=520\');' + delButton + '"><br><input type="button" value="ページ更新してリセット" onClick="window.location.reload(true)"><br>' + nama1 + nama2 + ver;
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,120,240,0.5)';
div.setAttribute("id", "nicoLivew");
document.body.appendChild(div);
}();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。