ニコニコ動画でコメントを取得する方法のメモ

動画再生ページ上で動作するGreasemonkeyスクリプトから,動画についたコメントを取得する方法は主に2通りある。それぞれについてメモ。

新プレイヤーのAPIを使う方法

javascript: function hoge(data)alert(uneval(data)); void(document.getElementById("flvplayer").ext_getThreads('hoge'));

以下のような応答が得られる。

[{type:"main", id:0}, {type:"local", id:1}]

ここで得られたスレッドID?を使って,以下を呼び出す。

javascript: alert(JSON.stringify(document.getElementById("flvplayer").ext_getComments(1)));

以下のような応答が得られる。コメント番号降順で得られるっぽい。

[
  {"message": "mohrmohr", "resNo": 13, "vpos": 14970, "date": "Sun Nov 21 2010", "command": "184"},
  {"message": "ahogeahoge", "resNo": 12, "vpos": 7340, "date": "Sun Nov 21 2010", "command": "184"},
  {"message": "mohrmohr", "resNo": 11, "vpos": 3160, "date": "Sun Nov 21 2010", "command": "184"}
]

得られるコメントは,動画上で表示されているものと同じよう。10分超の動画なら1000件だし,短ければ得られるコメントも少なくなる。
メッセージサーバにアクセスしてXMLを取得する場合と比較したメリット・デメリットは以下の通り。

メリット
  • 通信が発生しない
    • 即座にコメントを取得できる
    • 複数のGreasemonkeyスクリプトからコメントを取得してもアクセス制限されない
  • JSのオブジェクトとして直接取得できる
    • パース処理が不要
デメリット
  • 動画に表示されているコメントしか取得できない
  • ユーザID,プレミアムか否か,コマンド等が取得できない
  • 投稿者コメントが取得できない?

コメント中のURLを抽出するなどの用途なら十分使い物になりそうですね。

メッセージサーバにアクセスする方法

昔からある方法。404 Not Foundを参考にすれば良さそう。
リクエストの<thread>要素の属性として,whenとwaybackkeyを与えれば過去ログも取得できる?