Hatena::ブログ(Diary)

kiyohoge

2010-08-19

ニコニコ動画のプレーヤーを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からは通常コメントやチャンネルコメント、

ニコスクリプトコメント、ローカルコメントは取得できるけど

投稿者コメントは取得できない。

abab 2010/08/25 23:39 やっぱり16:9に自動にすることはできないんですかね。

kiyo_hogekiyo_hoge 2010/08/27 23:32 それほど詳しく読み込んだわけではありませんが
それっぽいのは見あたりませんでした。

alifeclubalifeclub 2010/09/03 22:47 いつも楽しく観ております。
また遊びにきます。
ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証