ニコニコ動画でコメントを取得する方法のメモ
動画再生ページ上で動作する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を与えれば過去ログも取得できる?