以前に、ニコニコ生放送とニコニコ実況のコメント取得方法について記事を書きました。
今回はニコニコ動画のコメント取得とニコニコ生放送の過去ログ取得方法について備忘録的なまとめを書きます。

まず、ニコニコ動画のコメント取得方法です。
他のサイトにも参考になる情報はたくさんありますが、古い情報も多いため、今回改めて整理していきます。
ニコニコ動画のコメントシステムは少しずつ変わっており、まずは現状を把握します。
こちらに詳しくあります。

以前は最新コメントを順に取得する方式だったのが、1分あたり100コメントを取得する方式が導入され、現在はそれらをミックスした方式になっているようです。

ニコニコ動画のコメント取得

ニコニコ動画のコメントを取得するにはコメントサーバにアクセスする必要があります。
各動画コメントサーバの情報はニコニコ動画APIを叩いて取得します。
ニコニコ動画APIについては、こちらに詳しくあります。

叩くのは「http://flapi.nicovideo.jp/api/getflv/sm*」です。
古い情報では「http://www.nicovideo.jp/api/getflv/sm*」となっていますが変更されたようです。
古い方を叩いても新しい方にリダイレクトされます。
このAPIを叩きThreadID(thread_id=***)・コメントサーバのアドレス(ms=***)を取得します。
取得したコメ鯖に、リクエストをポストするとコメントが返ってきます。
リクエストするデータは前述の理由のため、大きく二通りあります。
まず、昔のように最新コメントを連番で取得する場合には
<thread res_from="-1000" version="20061206" scores="1" thread="{0}" />
とリクエストします。res_from="-***"は、さかのぼって取得するコメント数を指定します。最大で-1000だと思われます。
thread=”*****”は先ほど取得したThreadIDを入れます。
scores="*"はNG共有に使われるパラメーターをコメントに付けるかを指定します。1を指定すると、レスポンスに
<chat thread="1245866167" vpos="60279" date="1362920403" date_usec="323471" 
      mail="184" user_id="8EZgloVBMo6JAvJvrRBfh2kV4Wc" premium="1" 
      anonymity="1" locale="ja-jp" score="-7338">
  キタ━━━━(゚∀゚)━━━━!!
</chat>
という感じでscoreが付加されます。
スコアの意味などNG共有の詳細は下のリンクから
この方法は普通の動画のみ有効で公式配信されているアニメなど、公式関連の動画では以下の文字列をポストします。
<thread res_from="-1000" version="20061206" thread="{0}" 
        threadkey="{1}" force_184="{2}" scores="1" />
threadkeyとforce_184の意味は不明ですが、
「http://flapi.nicovideo.jp/api/getthreadkey?thread=****」を叩くと取得できます。
新しい方式でコメントを取得しようとした場合、普通の動画は
<packet>
 <thread thread="{0}" version="20090904"  />
 <thread_leaves scores="1" thread="{0}">0-{1}:100,1000</thread_leaves>
</packet>
っとポストすると取得できます。{1}は動画の長さ。24分なら24+1の25と指定します。
公式動画の場合は
<packet>
 <thread thread="{0}" version="20090904" threadkey="{1}" 
         force_184="{2}" />
 <thread_leaves scores="1" thread="{0}" threadkey="{1}" 
         force_184="{2}">0-{3}:100,1000</thread_leaves>
</packet>
で取得できます。
次に過去ログを取得する方法です。
過去ログはプレミアム会員のみ取得できます。 一般会員でも取得できるようになりました。
まず、一般の動画の場合は、以下のリクエストをポストします。 
<packet><thread thread="{0}" version="20061206" res_from="-1000" 
waybackkey="{1}" when="{2}" user_id="{3}" scores="1" /></packet>
waybackkeyは「http://flapi.nicovideo.jp/api/getwaybackkey?thread=***」を叩くと取得できます。
user_idは自分のアカウントIDです。
whenは取得するコメントの時間です。UNIX時間で指定します。
公式動画の場合は
<packet><thread thread="{0}" version="20061206" res_from="-1000" 
waybackkey="{1}" when="{2}" user_id="{3}" threadkey="{4}" 
scores="1" /></packet>
です。これは連番で取得する方法ですが、同じように毎分式で過去ログを取得することも可能です。
これを利用すれば全コメントを取得することができます。

ニコニコ生放送の過去ログ取得

次は生放送についてです。
放送中の番組のコメントをリアルタイムで取得していく方法は前回書きました。
今回は放送後、タイムシフトでのコメントを取得する方法です。
とは言っても、リアルタイムで取得するのと、ほぼ変わりません。
前の記事にもあったように、生放送はソケット通信でコメントの取得を行います。
それ以外は動画の時と同じです。
ソケット通信のためにニコ生の場合はThread・addressに加えてポートも必要になります。
それらの情報は「http://live.nicovideo.jp/api/getplayerstatus?v=lv****」を叩けば拾えます。
生放送の場合に送信する文字列はこうなっています。

<thread thread="{0}" version="20061206" res_from="-{1}" scores="1" />\0
res_fromで指定した分のコメントが送られてきます。
しかし生放送は既に番組が終了しているので、コメ鯖につないでいても、それ以上何も送られてきません。
さらに昔のコメントを拾うには以下の文字を送信すれば送られてきます。
<thread thread="{0}" res_from="-{1}" version="20061206" when="{2}" 
        waybackkey="{3}" user_id="{4}" scores="1" />\0
waybackkeyは「http://watch.live.nicovideo.jp/api/getwaybackkey?thread=***」を叩いて取得します。
whenは動画と同じく時間です。
こちらも時間をうまく指定して順に取得していけば、全てのコメントを拾うことができます。

以上で終了です。
既出の情報ですが、まとめてみました。

おわり

【ちなみに】
 ちなみに、プレミアム会員でなくとも全コメント取得できるようになったわけですが、膨大なコメントを取得しようとするとそれなりに時間がかかります。そういった場合に起こることですが、コメントを取得する際のキーパラメータ(waybackkeyやthreadkey、force_184)は一定時間で更新され、この更新時間をまたぐと取得できなくなります。そういった場合は、もう一度キーを取得し直す必要があります。

【前の記事】

【追記記事】

【ソース・参考サイト】