ニコニコ動画のプレーヤーをJavaScriptから操作するAPI一覧

調べてみたのでメモ。
ちなみにいかのplayerは


var player = document.getElementById('flvplayer');
で取得できるようなプレーヤーの要素。

player.ext_play(boolean) -> void
引数がtrueの場合実行、falseなら停止。


player.ext_setPlayheadTime(number) -> void
number秒後にシーク。


player.ext_setMute(boolean) -> void
引数がtrueの場合ミュート、falseならミュートを解除。


player.ext_setVolume(number) -> void
音量を0〜100の範囲で音量を調節、それ以外の値が引数だと無効。


player.ext_setCommentVisible(boolean) -> void
引数がtrueの場合コメントを表示、falseならコメントを非表示。


player.ext_setRepeat(boolean) -> void
引数がtrueの場合リピート再生を有効、falseならリピート再生を無効。


player.ext_setVideoSize(string) -> void
引数が'normal'ならフルスクリーン表示を解除、'fit'ならフルスクリーン表示
それ以外なら無効。


player.ext_isCommentVisible() -> Boolean
コメントが表示されているかどうか。


player.ext_isMute() -> Boolean
ミュートかどうか。


player.ext_isRepeat() -> Boolean
リピート再生が有効かどうか。


player.ext_isWide() -> Boolean
フルスクリーン表示かどうか。


player.ext_getVolume() -> Number
音量を0〜100の範囲で取得。


player.ext_getVideoSize() -> String
フルスクリーン表示でなければ'normal'、
フルスクリーン表示なら'fit'が戻り値。


player.ext_getStatus() -> String
今再生するところがシーク中なら'seeking'、動画の準備中なら'stopped'、
再生中なら'playing'、停止状態なら'paused'、再生が終了していれば'end'。
あと'load'がそれっぽいけどどんな状態で返るのかは分からなかった。


player.ext_getPlayheadTime() -> Number
何秒再生したか、小数切り捨て。


player.ext_getTotalTime() -> Number
動画が全部で何秒か、小数切り捨て。


player.ext_isEditedOwnerThread() -> Boolean
投稿者コメント編集モードで投稿者コメントを編集したかどうか。


player.ext_sendLocalMessage(string, string, number) -> void
コメントを投稿する。引数はそれぞれ「メッセージ内容」、「コマンド」、
「投稿する時間(秒)」。


player.ext_getLoadedRatio() -> Number
動画を読み込み済みの時間の割合、0〜1の間の小数。


player.ext_sendOwnerMessage(string, string, number) -> void
投稿者コメントを投稿する。引数はext_sendLocalMessageと同じ。


player.ext_setInputMessage(string, string) -> void
プレーヤーにコメントをセット。第1引数はコマンド欄、
第2引数はコメント内容欄にセットされる。


player.ext_getThreadse(string) -> Boolean
動画再生ページのwindowに定義されたグローバル関数名を引数に取り、
それをコメントの種類の情報を引数として渡して実行する。
stringが''の場合false、入力されなければエラー、それ以外の場合はtrueが
戻り値となる
window[string]に渡されるのは以下のような配列(あくまでも例)

[{id: 0, type: 'local'}, {id: 1, type: 'main'}]
ニコスクリプトコメントがある場合

[{id: 0, type: 'local'}, {id: 1, type: 'nicos'}, {id: 3, type: 'main'}]
チャンネルコメントがある場合

[{id: 0, type: 'private'}, {id: 1, type: 'main'}, {id: 3, type: 'local'}]
どのtypeのオブジェクトが何番目に来るのかは動画によって
(条件によってかも)違うみたい。idはオブジェクトの配列中の位置と一致。


player.ext_getComments(int, int = 1000) -> Array
第1引数はどのidのコメントの種類を取得するか、
第2引数は取得するコメント数の最大値。
戻り値はコメントの情報を含むオブジェクトの配列。
コメントの情報を含むオブジェクトの例

{
command: '184' // コマンド
date 'Fri Aug 20 2010' // コメント投稿日時
message 'hogehoge' // コメント内容
resNo 100 // コメ番
vpos 47560 // 動画先頭から何ミリ秒経過した時に投稿されたか
}
コメントの種類のidはext_getThreadseで実行される関数の引数に渡される
配列中のコメントの種類についての情報を持つオブジェクトのidに対応する。


最後にext_getThreadseとext_getCommentsを利用して通常コメントを取得する例

var player = document.getElementById('flvplayer');
var mainThreadId;
var getThreadInfo = function(param) {
for (var i = 0, l = param.length; i < l; i++) {
if (param[i].type == 'main') {
mainThreadId = param[i].id;
}
}
}

player.ext_getThreads('getThreadInfo');
if (!isNaN(mainThreadId)) {
console.log(player.ext_getComments(mainThreadId, 1000));
}

Firebugなどで動画ページで上記のコードを実行すると
通常コメントが取得できる。


多分ext_getCommentsからは通常コメントやチャンネルコメント、
ニコスクリプトコメント、ローカルコメントは取得できるけど
投稿者コメントは取得できない。