ニコニコ動画のコメントをダウンロード

動画にコメントを付けられるサービスで有名なニコニコ動画ですが、以前からコメントのデータには少々興味があり、分析してみると面白いのではないかと考えています。そのためには、まずコメントのデータをダウンロードしなければならないのですが、いろいろ調べた結果、HTTP通信で取得できることがわかりました。

具体的には、動画のURLを”http://www.nicovideo.jp/watch/sm******”とすると、まず、”http://www.nicovideo.jp/getflv?v=sm******”を開きます。すると、メッセージ用のスレッドIDとメッセージサーバーのURLを取得することができます。それぞれ、thread_idとmsの値がそれです。

次に、メッセージサーバーにHTTPリクエストをしますが、POSTメソッドを使用し、次のような書式のxmlを”http://msg**.nicovideo.jp/api/”に送信します。

07/12/08くらいにメッセージサーバーのURLが変更されたようです。詳しくは「メッセージサーバのURLが変更されたようです」をご覧ださい。

<thread thread="**********" version="20061206" res_from="***" >

*のところは任意の値です。サーバーのアドレス、threadの値はthread_idなので、上のところで取得した値を入れてリクエストします。res_fromは、取得するレス数を指定します。仕様がよくわからないのですが、-1から-1000まで有効で、指定した値の符号を取った分のレスが取得できます。無効な値だと、250取得されます。

既にコメントを取得できるGetNicoNicomentというソフトがありますが、ダウンロードから分析をひとつのソフトでやりたいのと、なぜか昨日まで使えたのに、今日はまったくコメントを取得することができないので、ダウンローダーを試作してみました。

開発はCocoaです。NSMutableURLRequestがリクエストに関しては面倒みてくれるので、簡単に作成できました。

NSMutableURLRequest *theRequest = [[[NSMutableURLRequest alloc] initWithURL:@"http://msg**.nicovideo.jp/api/"] autorelease];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[[NSString stringWithString:@"<thread thread="**********" version="20061206" res_from="-500" />"] dataUsingEncoding:NSShiftJISStringEncoding]];

これで作成したURLを、NSURLDownloadやNSURLConnectionを渡せば、ダウンロードすることができます。

試作機:
ダウンローダ

URLを指定するときにシートダイアログを使ってしまっているので、テキストエディタにしか見えませんが一応ダウンローダーです。コメントは上のようなXML形式で取得されます。さすがに2chとは時代が違うので、フォーマットがしっかりしてますね。

ところで、res_fromの属性にいろいろな値を入れて試してはいるのですが、どうも最高1000レスまでしかコメントを取得することができません。もしかしたら、もっと他の属性があったりするのかもしれませんが、仕様は公開されていないので不明です。やはりコメントは全てダウンロードできないとデータとしては不十分なので、その方法が知りたいです。このまま探しても見つからないのなら、GetNicoNicomentのパケットでもモニターしみるつもりです。

参考にしたサイト:
モ(以下略
よしゆきのblog

コメント投稿