前回ニコニコ動画APIを調べた時点では、コメントを取得してどうこうしようとか、flvをダウンロードしてどうこうしようとか考えてなかったので、getflv関連、特にコメントの取得なんかは全く調べてなかった。
今回、ちょっとコメントを取得して遊んで見ようと思い立ったので、コメントを取得する具体的な方法を調べて見た。
コメントを取得するまでの基本的な手順は次の通り:
1. ニコニコ動画にログイン
2. api/getflvにアクセスして動画情報を取得
3. 動画情報からメッセージサーバのアドレスを抽出(ms=)
4. メッセージサーバにxmlをPOSTで送信
5. 最大1000件のコメントデータをxmlで受け取り
1.のログインはhttps://secure.nicovideo.jp/secure/login?site=niconicoにログインに必要な情報をPOSTで送信するだけ。
最低限必要なのはmailとpasswordの二つ。それぞれ値はアカウントメールアドレスとアカウントパスワード。
この時、送られてくるCookieを保存しておかないと、以後の処理が出来ない
2.は通常通りアクセスして情報をもらってくるだけ。
ただし、getflvはログインしている必要があるので、リクエストを送るときにCookieも送信しないと取得できない。
4.で送信するxmlはこんな感じ:
<thread thread="スレッドID" version="20061206" res_from="コメント数">
スレッドIDはgetflvで取得したThread_IDを指定。
res_fromは新しい順に何件前までを取得するかを指定。-1から-1000まで。
res_fromに不正な数値が入力された場合は、-250が設定される。
因みに投稿者コメントを取得する時は、これにfork="1"を追加する:
<thread thread="1173108780" version="20061206" res_from="-1000" fork="1">
xmlをgetflvの動画情報に書かれているメッセージサーバ(ms=)にPOSTで送信すると、xml形式のコメント情報を取得できる。
因みにコメントの取得はログインしていなくてもできるっぽい。
(もっとも、msがgetflvでしか取得できない・・・外部プレイヤ用のログイン不要なAPIもあるらしい?・・・のでどうやってもニコニコにログインする必要はある)
とりあえず、続きにPHPでコメントを取得するテストコード。例の如く、"とりあえず取得できるっぽい感じ"で作ってるので、環境によって動かなかったり、セキュリティホールがあったりはざらです。