このAPIは2024年1月28日でこのAPIも終了しました
2024年1月現在は下記の記事の方法で取得して下さい
はじめに
ニコニコ動画の動画IDから動画情報を取得する方法として
https://api.ce.nicovideo.jp/nicoapi/v1/video.info
というAPIが使用されていましたが
実はこのAPIは3DSから呼ばれるものなのです
終わりは突然に
ニコニコ動画では長らく3DSでの視聴も可能でしたが2023年3月31日で終了しました
このためこのAPIが使えなくなってしまいました
代わりのAPIは?
ではこれに代わるAPIはあるのかというと
https://ext.nicovideo.jp/api/getthumbinfo/
というAPIがあります。
しかしこのAPIは JSON ではなく XML で返ってくるためちょっと不便なのとコメントを取得するための スレッドID を取得する事が出来ません
さらなるAPIを探して
ニコニコ動画の視聴時の通信を監視してどのAPIが使われているのかを確認しましたが見つかりません、かなり強敵のようです。※Googleのブラウザに標準で付いてる機能です
ですがここで面白いことがわかりました。
動画視聴時の通信で動画情報を呼び出したときの情報がGoogleの方になぜか残っていました。
Google先生さすがです。
新APIの仕様
新しいAPIはこれです
https://www.nicovideo.jp/api/
なんかシンプルです。
呼び出すための仕様がありますのでそれを説明すると
https://www.nicovideo.jp/api/watch/v3_guest/
動画視聴のための watch と バージョン3の情報をゲストとして取得するための vs_guest を追加
まだまだ必要です
この後に sm で始まる動画ID とユーガーが使用するフロントエンドIDやフロントエンドバージョン番号、さらにトラックIDが必要です。
https://www.nicovideo.jp/api/watch/v3_guest/[smで始まる動画ID?_frontendId=[フロントエンドID]&_frontendVersion=[フロントエンドバージョン]番号&actionTrackId=[トラックID]
トラックID
トラックIDは24文字分の文字列です
文字列は呼び出す度にランダムで生成する必要があります。
最初の10文字は大文字小文字を含める英数字です
次はアンダースコア「_」を1文字
最後は13桁の数字
これを組み合わせた24文字がトラックIDになります
呼び出し方をそのまま書いてしまうとサーバーに迷惑ですので記載していません
呼び出し方さえ説明すれば誰でもアクセス出来ますがこのAPI、現時点でまだ動画視聴側が対応していないようなデータも返してきます。
なお短い時間内に何度もアクセスすると一定時間のアクセス禁止を喰らうと思いますので注意して下さい。
(私はやっていませんがニコニコ動画のAPIはおよそこういう仕様です)
返り値の解説
呼び出しに成功すると大量のデータが送られてきます。
"meta":{
"status":200
},
ステータスが200なら成功
"data":{
"ads":null,
"category":null,
"channel":null,
あとは data の中に色々あります
この辺は将来使うデータっぽい
"client":{
"nicosid":"ニコニコのIDが入る",
"watchId":"smで始まる動画IDが入る",
"watchTrackId":"呼び出しに使ったIDが入る"
},
内部IDとかが返ってきます、呼び出す時に使ったトラックIDも返ってきます
"comment":{
"server":{
"url":"コメントサーバーへのアクセス方法が入る"
},
"keys":{
"userKey":""
},
"layers":[
{
"index":0,
"isTranslucent":false,
"threadIds":[
{
"id":スレッドIDが入る,
"fork":1,
"forkLabel":"owner"
}
]
},
comment のところで親切にコメントサーバーへのアクセス方法まで書いてくれています
threadIds のところにコメントを取得する時に使うスレッドIDが入ります
なぜかコメントの大グループにメイン、オーナー、イージーがあります
何がデータの量を増やしているのかというと 簡易コメント のデータがものすごく多くなっています。さらに簡易コメントとニコニコ大百科がつながっているようです。
視聴するときのプロトコルが複数あったり、解像度情報も複数あるなど盛りだくさんのデータです。
いいね はこちらのAPIからの呼び出しで取得出来ているので結構最近のAPIと思われます
おわりに
簡単に新APIを解説してみましたがこんなこと手動でしなくてもツールもあるのでそっちを使った方が楽です。