はじめに
この記事にてニコニコ動画に書き込まれたコメントの取得方法を紹介していました
しかし2024年8月5日にコメントが新サーバーに移行しました
そしてこれまでコメントを取得を取得していたアプリからは取得出来なくなりました
ここでは2024年9月3日に解析した新コメントサーバーとの通信方法を解説します
スレッド情報
コメントを取得するにはまずスレッド情報を取得する必要があります
ニコニコ動画ではsmで始まる動画IDによって普通は管理されていますが
内部ではスレッドとよばれるIDで管理されていますので
まずは動画IDをスレッドIDに変換する必要があります
その変換過程で動画の情報も取得できます
スレッド取得APIは以前は
https://www.nicovideo.jp/api/watch/v3_guest/
というAPIがあり、URLの後ろに動画IDを追加 例えばこの技術の紹介動画のスレッドを取得する場合は
https://www.nicovideo.jp/api/watch/v3_guest/sm43038967
おまじないとしてパラメータを追加
https://www.nicovideo.jp/api/watch/v3_guest/sm43038967?_frontendId=70&_frontendVersion=0&actionTrackId=
この後ろにランダム生成した英数字9文字と数字12文字を追加すると動画情報が取得出来ていたのですが出来なくなりました。
json形式で返してくるapiが見当たらないので動画視聴ページのHTMLを取得して解析するしか無さそうです。
https://www.nicovideo.jp/watch/sm43038967
取得結果
うまくいくとHTMLが取得出来ます
必要な部分だけ説明すると
<link href="https://resource.video.nimg.jp/web/styles/modules/navigation/common_header/common_header.css?1709186126" rel="stylesheet">
common_header.css?の後ろに引っ付いている 1709186126 がスレッドIDで
<div id="js-initial-watch-data"
というタグの中に様々な情報が入ってます、一部の記号や漢字はHTML用にデコードする必要があります。
"threadKey":"eyJ0eXAiOiJKV1QiL・・
スレッドのキーとしてここの長い情報を覚えておきます
コメントを取得する
新しいコメント取得サーバーはこちら
https://public.nvcomment.nicovideo.jp/v1/threads
アクセスしても何も返しません
実は今回からGETではなくPOSTに変わりました
POSTとしてJSON形式で大量の情報を送って一致させないと返しません
{
"params":{
"targets":[
{
"id":"スレッドID",
"fork":"owner"
},
{
"id":"スレッドID",
"fork":"main"
},
{
"id":"スレッドID",
"fork":"easy"
}
],
"language":"ja-jp"
},
"threadKey":"スレッドキー",
"additionals":{}
}
さきほど取得したスレッドIDとスレッドキーを置き換えたものをPOSTすると
説明 | |
---|---|
57a1 | 次のデータ行のバイト数 |
{"meta":{"status":200},"data":・・・ | データ |
・・ | |
0 | データの末尾 |
この形式で返ってきます
ステータス200が返っていれば正常です
おわりに
この説明を見ればわかる人ならすぐにコメントを取得出来るでしょう
わからない人は素直に新サーバーに対応したアプリを使って下さい
昔は同じようなアプリが複数の開発者によって公開されていましたが
2024/3/1現在、ついに私1人だけになってしまいました。
今使っているAPIもいつまで使えるかわかりませんが解析は続けたいと思います