ニコニコ動画で前回連続再生中だったマイリストを再び連続再生させるためのブックマークレット

仕事中に誰かのマイリストを連続再生で掛けっぱなしにするなんてことをしてるんですが、ブラウザを再起動するとマイリストの「再生リスト」がリセットされてしまうので(オススメ動画がランダムに再生されるようになる)、


  1. 現在再生中の動画が何かを確認
  2. マイリストのページに戻る
  3. 連続再生ボタンを押す
  4. 再生中だった動画まで戻る

というようなことを毎回しています。ああ面倒くさい。再生リストに任意のマイリストを放り込めるようになればいいのに。……いやそうか「連続再生」ボタンのリンクをブックマークすれば良いんじゃないか。と思ったんだけど。



連続再生リンクの仕組み

例えば僕がよく聞いているRinさんの東方アレンジのマイリストはURLがこんな感じで、

https://www.nicovideo.jp/mylist/18011801

連続再生のリンクはこんな感じ。

https://www.nicovideo.jp/watch/sm14442321?mylist_sort=8&continuous=1&playlist=eyJpZCI6InZpZGVvX3BsYXlsaXN0X215bGlzdCIsIm15bGlzdElkIjoxODAxMTgwMSwibXlsaXN0TmFtZSI6IlJpbu-8oOadseaWueODj-OCpuOCueODquODn-ODg-OCr-OCuSJ9

「sm14442321」は再生する動画の動画ID、「mylist_sort」はソート順、「continuous」は「連続再生」のオンオフ、「playlist」は再生リストに表示するプレイリストのID。マイリストページ内のJarty(SmartyライクなJavaScript向けテンプレートエンジンだそうです)で定義されている「watch_playlist」と同じものです。



で、この連続再生のリンクを表示すると引数が解釈され、再生リストに指定されたマイリストが指定されたソート順でロードされ、連続再生のオンオフが設定されて、動画がロードされます(その際引数は無くなります)。つまりこの「watch_playlist」に値を指定してやれば僕の希望である、再生リストに任意のマイリストを放り込むってのが出来ます。


そうなんですがね……この「watch_playlist」の仕組みがよく分かんないんですね。APIかなんかで取れるといいんですけど、わかんないし。



やりたいこと:便利だなと思う使い方

https://www.nicovideo.jp/mylist/18011801?mylist_sort=8&continuous=1

とかにすると並べ替えて最初の動画を連続再生で再生してくれるみたいな感じ。今の連続再生のリンクをブックマークした場合、マイリストに新しい動画が追加されたときに再生されない可能性がある(なぜならブックマークが再生する動画を含んでいるから)。ブックマークに含まれる動画をマイリストと無関係な動画にすると、まずその動画が再生されたあとにマイリストが再生されるのでマイリストが更新されても全ての動画を再生すると言う要件は満たせる。例えばこんな感じ。

https://www.nicovideo.jp/watch/sm9?mylist_sort=8&continuous=1&playlist=eyJpZCI6InZpZGVvX3BsYXlsaXN0X215bGlzdCIsIm15bGlzdElkIjoxODAxMTgwMSwibXlsaXN0TmFtZSI6IlJpbu-8oOadseaWueODj-OCpuOCueODquODn-ODg-OCr-OCuSJ9

でもこれだと毎回、陰陽師見て始まるんですよね(笑)
それはつらい。どんだけ好きなのか。

せめてマイリストページのグローバル変数になっててくれればブックマークレット持つくれるんだけど、Jartyの変数って外から取れるのかしら。



出来ました。


任意のマイリストで上記を実行すると、「再生が多い順」「連続再生オン」の状態でマイリストの最初の動画が表示されます。Jartyの変数はJavaScriptで指定してやっているので、ブックマークレットで取得出来ます。

確認方法

javascript:console.log(Jarty.__globals);

で、この中に先ほどの「watch_playlist」やマイリストで表示する動画のリスト(ソート済み)が格納されています。

watch_playlist

Jarty.__globals.watch_playlist

マイリストの最初の動画

Jarty.__globals.my.currentItems[0].item_data


それを組み合わせてブックマークレットを作りマイリストで実行してやれば連続再生でマイリストが再生出来ま……す?あれ?



こんなことがやりたかったんだっけ

えーと、結局、連続再生リンクをクリックする作業をブックマークレットに置き換えただけで別に何も便利になってませんでした。ちがう、こんなことがやりたかったんじゃない。ブックマークから開くだけで任意のマイリストが再生リストに入った状態で動画を表示したかったんだ。しかもその動画はマイリストの先頭の動画が自動的に取得される。

マイリスト周りのAPIが公開されていれば実現出来るんですけど、されてないんですよねえ……残念ながら。



というわけで最終的な成果物


使い方

  1. マイリストを連続再生中にブラウザを閉じる
  2. ブラウザを開くと前回再生中だった動画が開くが、再生リストはリセットされている
  3. 上記ブックマークレットを実行
  4. 再生リストに「Rinさんの東方アレンジのマイリスト」を入れて動画を再読込み
  5. 前回の連続再生中の状態に戻る


ブラウザを再起動したときに表示される動画をそのまま再生させるという方針になりました。これなら連続再生でもともと再生させたかったマイリストが再生されていくことになるし、要件は十分に満たしてます。引数「playlist」が決め打ちなので全く汎用性がなく、マイリストごとに調べて書き換えないといけませんが、ずっと同じマイリストを聞き続けるならこれで不便がないので良いかなと。


ちなみに引数「playlist」がなにかはマイリストでこのbookmarkletを実行するとわかります。

javascript:prompt('playlist',Jarty.__globals.watch_playlist);void(0);