今回はニコニコ動画のコメント取得とニコニコ生放送の過去ログ取得方法について備忘録的なまとめを書きます。
まず、ニコニコ動画のコメント取得方法です。
他のサイトにも参考になる情報はたくさんありますが、古い情報も多いため、今回改めて整理していきます。
ニコニコ動画のコメントシステムは少しずつ変わっており、まずは現状を把握します。
こちらに詳しくあります。
ニコニコ動画のコメント取得
ニコニコ動画のコメントを取得するにはコメントサーバにアクセスする必要があります。
各動画コメントサーバの情報はニコニコ動画APIを叩いて取得します。
ニコニコ動画APIについては、こちらに詳しくあります。
古い情報では「http://www.nicovideo.jp/api/getflv/sm*」となっていますが変更されたようです。
古い方を叩いても新しい方にリダイレクトされます。
このAPIを叩きThreadID(thread_id=***)・コメントサーバのアドレス(ms=***)を取得します。
取得したコメ鯖に、リクエストをポストするとコメントが返ってきます。
リクエストするデータは前述の理由のため、大きく二通りあります。
まず、昔のように最新コメントを連番で取得する場合には
<thread res_from="-1000" version="20061206" scores="1" thread="{0}" />
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>
スコアの意味などNG共有の詳細は下のリンクから
この方法は普通の動画のみ有効で公式配信されているアニメなど、公式関連の動画では以下の文字列をポストします。
<thread res_from="-1000" version="20061206" thread="{0}"
threadkey="{1}" force_184="{2}" scores="1" />
「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>
公式動画の場合は
<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>
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
しかし生放送は既に番組が終了しているので、コメ鯖につないでいても、それ以上何も送られてきません。
さらに昔のコメントを拾うには以下の文字を送信すれば送られてきます。
<thread thread="{0}" res_from="-{1}" version="20061206" when="{2}"
waybackkey="{3}" user_id="{4}" scores="1" />\0
whenは動画と同じく時間です。
こちらも時間をうまく指定して順に取得していけば、全てのコメントを拾うことができます。
以上で終了です。
既出の情報ですが、まとめてみました。
おわり
【ちなみに】
ちなみに、プレミアム会員でなくとも全コメント取得できるようになったわけですが、膨大なコメントを取得しようとするとそれなりに時間がかかります。そういった場合に起こることですが、コメントを取得する際のキーパラメータ(waybackkeyやthreadkey、force_184)は一定時間で更新され、この更新時間をまたぐと取得できなくなります。そういった場合は、もう一度キーを取得し直す必要があります。
【前の記事】
【追記記事】
【ソース・参考サイト】