記事一覧はこちら

ニコニコ動画のwatch.jsについて

ニコニコ動画Zeroの視聴ページ(/watch)で読み込まれているスクリプトファイルhttp://res.nimg.jp/js/watch/watch.js
常に読み込まれるこのファイルには膨大な情報が収納されていた。

そもそも、ニコニコ動画Zeroは動画再生部分にしかフラッシュを使っておらず情報の大半をjavascript上で処理している。
そこでjsの調査を進めていたのだが、jsから直接動画プレイヤーを叩ける情報を手に入れ、調査が進んだ。
動画の長さを取得するには

WatchApp.namespace.model.player.NicoPlayerConnector.getVideoLength();

とコンソールで叩けば出てくる。
この処理は可読化したwatch.jsの

WatchApp.namespace("model.player", function () {
//中略
    b.getVideoLength = function () {
        return 1E3 * $("#external_nicoplayer")[0].ext_getTotalTime()
    };
//後略
    return b
}, "NicoPlayerConnector");

の部分に相当。
つまり、namespaceメソッドの第一引数、第三引数をプロパテイにする事で、第二引数の戻り値にアクセス出来る訳。
これを応用すれば、

WatchApp.namespace("model.player.comment", function () {
    var b = function () {};
    b.MAIN = "commentlist:main";
//中略
    return b
}, "CommentListNames");

の"commentlist:main"を呼び出したい時は

WatchApp.namespace.model.player.comment.CommentListNames.MAIN

と書けば呼び出せる。
watch.jsは可読化して1万3000行もある膨大なファイルだけど、これだけの情報があるとなるとやる気が出てくるものだ。
html5版動画プレイヤーもあるし、その内ごっそり視聴ページを書き換える拡張機能等が出てきそう。
しかし、ニコニコ解析まとめwikiなりスレなりが欲しいんだけど、どこかにあるんだろうか。今はトゥイッターでニコニコ javascriptで検索したりしているんだけど。
2012-05-09追記
ニコニコ動画Zeroのjsに関して、ニコニコ動画Zeroのプレイヤーから操作部分を取り出す でも調査を行いました。
2012-05-13追記
以前のはてブ