ページ内のニコニコ動画リンクを一覧取得するブックマークレット

  • 開いているページ内のニコニコ動画のリンクを取得するブックマークレットを作りました
  • ブラウザのブックマークに登録すると1クリックでリンクの一覧が取得できます
  • 他のツールと連携することで動画をまとめてダウンロードしたりマイリストに登録することができます

ブックマークレットってなに?

ブックマークレット (Bookmarklet) とは、ユーザーがウェブブラウザのブックマークなどから起動し、なんらかの処理を行う簡易的なプログラムのことである[注釈 1]。携帯電話のウェブブラウザで足りない機能を補ったり、ウェブアプリケーションの処理を起動する為に使われることが多い。

ブックマークレット - Wikipedia

ChromeやEdgeなどのブラウザのブックマークに登録して動かすことができるちょっとしたプログラムみたいなものです。 ソフトのインストールなどは不要で、コードを貼り付けたブックマークを登録しておくだけで使えるようになるので手軽に使えるのが利点です。

使い方

画面はChromeの例ですが、EdgeやFirefoxなど他のブラウザでも同じように使えると思います。

  1. ブラウザのブックマークバーで右クリックして「ページを追加」を選択

  2. URLの欄に以下のプログラムをコピペする

javascript:(function(){var d=document.links.length,b=document.querySelectorAll("iframe"),c="";niconicoIdReg=/(?:sm|nm|so|ca|ax|yo|nl|ig|na|cw|z[a-e]|om|sk|yk)\d{1,14}\b/;for(var e=0;e<d;e++)if(url=document.links[e].href,/(nicovideo\.jp|nico\.ms)/.test(url)){var f=url.match(niconicoIdReg);null!==f&&(smLinkTxt="https://www.nicovideo.jp/watch/"+f[0],c+=smLinkTxt+"\r\n")}b.forEach(function(a){a=a.getAttribute("src");/(nicovideo\.jp|nico\.ms)/.test(a)&&(a=a.match(niconicoIdReg),null!==a&&(smLinkTxt="https://www.nicovideo.jp/watch/"+
a[0],c+=smLinkTxt+"\r\n"))});window.confirm(c)&&(d=new Blob([c],{type:"text/plan"}),b=document.createElement("a"),b.href=URL.createObjectURL(d),b.download=document.title+"_link.txt",b.click())})();

3.適当な名前をつけて保存

保存するとブックマークとして登録されます。

4.登録されたブックマークをクリック

ブラウザで開いているページ内にあるニコニコ動画のリンクが表示されます。 リンクが存在しないときは空欄が表示されるだけになります。

「OK」をクリックすると、URLの一覧が記載されたテキストファイルがダウンロードされます。 ファイル名は<ページタイトル>_link.txtの形式になります。

リンクは埋め込み形式の場合も取得できますが、bit.lyみたいな短縮リンクが使われていると取得できないので注意です。

ニコニコのマイリストやシリーズの動画を取得したり、ブログの記事で紹介されている動画の一覧をまとめて確認したいときなどに使えると思います。

使い道

リンクの一覧を取得して何に使えるの?って話ですが、他のツールと組み合わせて以下のようなことができます。

動画をまとめてダウンロード

ytーdlpのオプションに指定することで、ファイルに記載された動画をまとめてダウンロードすることができます。 yt-dlpは動画をダウンロードするコマンドラインツールです。

https://github.com/yt-dlp/yt-dlp

細かい使い方などはこちらの記事参照 chitose-nanase.com

以下のような形で-a オプションに動画のURL一覧が書かれたテキストファイルを指定すると、その動画をまとめてダウンロードすることができます。

yt-dlp -a link.txt

ytーdlpじゃなくても他のGUIツールにもテキストファイルからまとめてダウンロードする機能が実装されてることもあります。

Vividlというyt-dlpGUI版みたいなソフトでは、リストをインポートすることでまとめて動画をダウンロードできます。

「動画のリンクをインポート」でダウンロードしたテキストファイルを選択すると、

テキストファイルにある動画が表示されるので、そこから必要なものを選択してダウンロードすることができます。

動画をまとめてマイリストに登録

ニコニコランキングメーカー(NRM)というソフトではランキング動画を作る機能以外にも、マイリストを作成する機能が提供されています。 ※ニコニコの仕様変更により利用できなくなる可能性はありますが、2024年1月現在は問題なく使えています。 mar-ky.hatenablog.com

1.ダウンロードしたテキストファイルを開き、動画ID以外の部分を削除して保存

watch/までの部分を選択してテキストエディタの置換機能を使うとすぐに削除できます。

2.NRMを開き、「ログイン」タブで自分のアカウントにログイン

3.「ファイルから入力」の項目で動画のID一覧が記載されたテキストファイルを選択

4.登録したいマイリストIDを指定し、「マイリストに動画を追加」をクリック

数が多いと時間がかかりますが、まとめてマイリストに動画を登録することができます。

上記の使い方以外にももちろんスプレッドシートで動画を管理するときに使ったりと使い道はいろいろあるかと思います。 リンクを取得するだけの機能ではありますが、ページ全体を選択してコピペ・整形するよりはだいぶ楽になると思います。

付録

ブックマークレットの元になったjavascriptのプログラムを置いておきます。 自由にカスタマイズしてご利用ください。

GetNicoLinks.js(クリックすると展開されます)

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level SIMPLE_OPTIMIZATIONS
// ==/ClosureCompiler==
javascript:(
  function GetAllLinks(){
    var linkNum = document.links.length;
    var iframes = document.querySelectorAll('iframe');
    var outputLinks = "";
    niconicoIdReg = /(?:sm|nm|so|ca|ax|yo|nl|ig|na|cw|z[a-e]|om|sk|yk)\d{1,14}\b/;
    
    for( var i=0 ; i < linkNum ; i++ ) {
      url=document.links[i].href;
      if (/(nicovideo\.jp|nico\.ms)/.test(url)) {
        let videoId = url.match(niconicoIdReg);
        if (videoId !== null) {
          smLinkTxt="https://www.nicovideo.jp/watch/" + videoId[0];
          outputLinks +=smLinkTxt + '\r\n';
        }
      }
    }
    iframes.forEach(iframe => {
      var src = iframe.getAttribute('src');
      if (/(nicovideo\.jp|nico\.ms)/.test(src)) {
        let videoId = src.match(niconicoIdReg);
        if (videoId !== null) {
          smLinkTxt="https://www.nicovideo.jp/watch/" + videoId[0];
          outputLinks +=smLinkTxt + '\r\n';
        }
      }
    });
    
    let result = window.confirm(outputLinks);
    if(result){
      const blob = new Blob([outputLinks],{type:"text/plan"});
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.download = document.title+ '_link.txt';
      link.click();
    }
  }
 )();

参考

ブックマークレットの作り方

Bookmarkletを作ろう(準備編) #JavaScript - Qiita

ニコニコ動画のリンクを取得するための正規表現の書き方

ニコニコ動画のURLの構造確認&動画IDを取得する正規表現(javascript) - matablo