ニコニコ動画でプレイリストが使える Greasemonkey スクリプト

「作業用BGMに動画を使いたいけど、メドレー系ばかりじゃなく短い動画も連続で見たい!」

僕は作業する時に、ニコニコ動画を BGM にする事が多いです。(作業用BGMタグをみるに、同じような人が結構いるみたい?)

それで、動画を選んでから作業を始めるわけなんですが、動画をひとつ見終えると、作業を中断して次の動画を選ぶ必要があって面倒なので、自然とくりかえし再生しやすく再生時間が長いメドレー系を選びがちです。でも、これだけ動画があるニコニコ動画なので、短い動画もみたいんです><

そんな人のために、ニコニコ動画でプレイリストを使えるようにする Greasemonkey スクリプトを作りました。(Greasemonkey スクリプトの使い方

インストール:niconicoplaylist.user.js更新履歴

※ 自動再生がプレミアム会員限定になってしまったので、プレミアム会員でないと自動的に連続再生できなくなっています…… orz

つかいかた

インストールして、ニコニコ動画のページを開くと、左上にこっそりと四角がはみでています。

これにさわると、プレイリストウィンドウがポコッとでてきます。

「ページ中の動画を追加」ボタンを押せば、開いているページの中の動画リンクを全てプレイリストに追加できます。たとえば、ランキングのページで押すと、以下のように1位から順番に全て追加されます。(2007/09/25 10:00 のマイリスト登録数ランキング)

あとは「再生」ボタンを押せば、プレイリストの先頭から連続再生がはじまります。再生された動画はプレイリストから削除されていきます。(なのでリストというよりキューかな?)

ランキングページだけでなく、たとえば検索結果をまとめて再生したり、きまぐれ検索でランダム再生したりできます。

ちなみに、途中で連続再生をやめたい場合は「全て削除」を押して、プレイリストをクリアしてください。

つくりかた

今回はちょっとずる(開発者特権の行使)をしてプレイヤーのソースを読み、使えそうな変数を Flash の GetVariable で監視することにした。本当は、FLVPlayer の statechange イベントをキャプチャしたいところだけど、内側からExternalInterface で呼び出してもらわない限り、外側からイベントはキャプチャできないので、今回は却下。

GetVariable でプレイヤーの state がとれないかと思ってためしたけど、どうもオブジェクトのプロパティはとれない模様なので、あきらめた。

プレイヤーの Flash は僕がいじっているわけではないので、ActionScript を斜め読みしてめぼしい変数を探した。

ContentLength は動画の総秒数、LastVpos は状態が更新された時点での動画再生位置が入っているようだったので、それを利用。ただ、再生が終了した時点で停止した時、LastVpos と ContentLength が一致するわけではないようだったので、多少の誤差(5秒まで)を許容するようにした。

ただ、将来に渡ってこの方法が使える保障はないので注意。将来的にはプレイヤーの Flash からイベントを外側に通知する仕組みを作りたいのこころ。

複数のプレイリストが作れるように実装はしたものの、ちょっと使ってみたところ、あんまり使わなそうだったので却下。でも、そののりしろは残しておく。

動画のリンク収集は、document.getElementsByTagName で A 要素を集めて、リンク先が "watch/***" かつ、クラス名が "video" のものだけを集めると、サムネイルなどのリンクは取り除ける。サムネイルをつけようかと思ったけど、プレイリストの見た目にそぐわなかったので見送り。

こういう風に道筋を思い起こして書いていくと、「なにを作るか」「どうやって作るか」も重要だけど、「なにを捨てるか」「なにをあきらめるか」も同じように重要だということがよくわかる。