nicoLivew Fork

    @@ -9,8 +9,7 @@ javascript:!function() { var loc = document.location.href, div = document.createElement('div'), - ua = window.navigator.userAgent.toLowerCase(), - day = 'v20160131', + day = 'v20160218', 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) { //いつもの放送ページの処理
    @@ -23,72 +22,90 @@ delButton = 'var f = &quot;flvplayer_container&quot;,flv = document.getElementById(f);flv.parentNode.removeChild(flv);'; //放送主かどうか //ログインしてるユーザーIDを取得 - var myUserIdSource = document.querySelectorAll('span[id="siteHeaderUserIconContainer"] > img'); - myUserId = myUserIdSource[0].outerHTML.replace(/[\s\S]\/(\d+)\.(jpg|png|gif)[\s\S]*/, '$1'); + 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>'; + } 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) { - liveUserId = 0; + var liveUserId = 0; } else { - var liveUserId = liveUserIdSource.innerHTML.replace(/[\s\S]+nicovideo.jp\/user\/(\d+)[\s\S]+/, '$1'); + var liveUserId = liveUserIdSource.outerHTML.replace(/[\s\S]+nicovideo.jp\/user\/(\d+)[\s\S]+/, '$1'); } //ログインしてるユーザーIDと放送主のユーザーIDを比較 + console.log(myUserIdSource.outerHTML); if (myUserId != liveUserId) { - nushi = 'N'; + var nushi = 'N'; } else { - nushi = 'Y'; + var nushi = 'Y'; } break; + + //新しい放送ページ(?)の処理 } case /live2\.nicovideo\.jp\/watch/.test(loc): { - var liveId = loc.replace(/.+?watch\/(lv\d+).*/, '$1'); - //ここ仕様変更に弱い - if (ua.indexOf('firefox') != -1) { - s = document.getElementsByTagName('script')[21].outerHTML; - } else { - s = document.getElementsByTagName('script')[20].outerHTML; + 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; } - var p = s.replace(/[\s\u2028\u2029]/g,''); + if (flashParam == null) { + alert('flashParam が取得できませんでした(◞‸◟)\nこのページのURL「' + loc + '」\n連絡先とか http://nico.ms/ar303976\nTwitter@uzuky'); + } + var p = flashParam.replace(/[\s\u2028\u2029]/g,''), //URL のパラメータ - var swf = p.replace(/.*?swf:"(http:.+?AriesPlayer\.swf)".*/,'$1?'); - var ws0 = p.replace(/.*?"(webSocketUrl)".+?"([\w\W]+?)".*/,'&$1=$2'), - ws = ws0.replace(/\\\//g,'/');alert(ws); - var ot = p.replace(/.*?"(openTime)".+?"(\w+)".*/,'&$1=$2'); - var at = p.replace(/.*?"(audienceToken)".+?"(\w+)".*/,'&$1=$2'); - var ec = "&enableClientLog=1"; - var bt = p.replace(/.*?"(beginTime)".+?"(\d+)".*/,'&$1=$2'); - var rn = p.replace(/.*?"(relatedNicoliveProgramId)".+?"(\w+)".*/,'&$1=$2'); - var bi = p.replace(/.*?"(broadcastId)".+?"(\d+)".*/,'&$1=$2'); - var pi = p.replace(/.*?"(programId)".+?"(\d+)".*/,'&$1=$2'); + 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'); - 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 = &quot;playerswf&quot;,flv = document.getElementById(f);flv.parentNode.removeChild(flv);"><br>', + 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 = &quot;playerswf&quot;,flv = document.getElementById(f);flv.parentNode.removeChild(flv);"><br>', delButton = 'var f = &quot;playerswf&quot;,flv = document.getElementById(f);flv.parentNode.removeChild(flv);', nushi = 'N'; break; + + //それ以外のページの処理 } default: { var liveId = prompt('放送IDかURL', ''); if (liveId.match(/lv[0-9]+/)) { - liveId = liveId.replace(/.+?(lv\d+).*/, '$1'), + var liveId = liveId.replace(/.+?(lv\d+).*/, '$1'), Aries = '', delButton = '', nushi = 'Y'; } else { - alert('放送IDが入ってないよ!\n「' + liveId + '」\n連絡先とか http://nico.ms/ar303976'); + alert('放送IDが入ってないよ!\n「' + liveId + '」\n連絡先とか http://nico.ms/ar303976\nTwitter@uzuky'); return false; } break; }} //放送主だったら追加 if (nushi == 'Y') { - 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>※かんたん配信タブは1番最初に操作したウィンドウの<br>配信ツールでなるべくいじってください<br>※放送情報変更の反映は少し時間がかかります</b></small><br>'; + 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>'; } else { - nama1 = '', + var nama1 = '', nama2 = ''; } //ページに追加 - div.innerHTML = '<div><b><span title="閉じる" onClick="var c = &quot;nicoLivew&quot;,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; + div.innerHTML = '<div><b><span title="閉じる" onClick="var c = &quot;nicoLivew&quot;,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.style.color = 'rgb(250,250,250)'; div.style.textAlign = 'center'; div.style.padding = '10px';
  • /* @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 = '<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'),
        Aries = '',
        delButton = 'var f = &quot;flvplayer_container&quot;,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>';
        } 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\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 = '<input type="button" value="Aries" onClick="window.open(\'' + swf + ws + ot + at + ec + bt + rn + bi + pi + '\',\'_blank\',\'width=960,height=512\');var f = &quot;playerswf&quot;,flv = document.getElementById(f);flv.parentNode.removeChild(flv);"><br>',
          delButton = 'var f = &quot;playerswf&quot;,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 = '<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>';
      } else {
        var nama1 = '',
        nama2 = '';
      }
    //ページに追加
        div.innerHTML = '<div><b><span title="閉じる" onClick="var c = &quot;nicoLivew&quot;,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.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);
    }();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2018/02/19 12:59:39 - 02/19
  2. 2018/02/19 12:08:46 - 02/19
  3. 2016/09/01 10:38:21 - 2016-09-01
  4. 2016/02/18 17:35:21 - 2016-02-18
  5. 2016/02/18 17:28:03 - 2016-02-18
  6. 2016/01/31 10:39:17 - 2016-01-31
  7. 2016/01/31 09:36:20 - 2016-01-31
  8. 2016/01/31 09:28:30 - 2016-01-31
  9. 2015/09/11 16:54:26 - 2015-09-11
  10. 2015/09/11 16:53:32 - 2015-09-11
  11. 2015/09/11 16:35:59 - 2015-09-11
  12. 2015/09/11 16:32:46 - 2015-09-11
  13. 2014/12/31 10:21:09 - 2014-12-31
  14. 2014/12/31 09:29:53 - 2014-12-31
  15. 2014/02/24 19:12:50 - 2014-02-24
  16. 2014/01/12 07:41:03 - 2014-01-12
  17. 2014/01/12 07:36:03 - 2014-01-12
  18. 2014/01/01 08:22:45 - 2014-01-01
  19. 2013/12/31 17:23:22 - 2013-12-31
  20. 2013/12/31 15:52:27 - 2013-12-31
  21. 2013/12/31 13:28:27 - 2013-12-31
  22. 2013/12/31 12:49:11 - 2013-12-31
  23. 2013/12/31 07:51:42 - 2013-12-31
  24. 2013/12/31 07:51:27 - 2013-12-31
  25. 2013/12/31 07:44:14 - 2013-12-31
  26. 2013/12/31 07:43:37 - 2013-12-31
  27. 2013/09/13 12:16:17 - 2013-09-13
  28. 2013/09/13 07:26:23 - 2013-09-13
  29. 2013/09/13 07:25:02 - 2013-09-13
  30. 2013/09/09 10:59:11 - 2013-09-09
  31. 2013/09/09 10:56:30 - 2013-09-09
  32. 2013/09/08 15:07:20 - 2013-09-08
  33. 2013/09/01 09:01:54 - 2013-09-01
  34. 2013/08/23 02:17:25 - 2013-08-23
  35. 2013/08/23 02:13:57 - 2013-08-23
  36. 2013/08/23 02:09:26 - 2013-08-23
  37. 2013/08/23 01:59:05 - 2013-08-23
  38. 2013/08/23 01:35:09 - 2013-08-23
  39. 2013/08/23 01:07:35 - 2013-08-23