ニコニコ実況 過去ログ API
ニコニコ実況の2009年11月から現在までのすべての過去のコメント (過去ログ) を XML や JSON データで取得できる、非公式な Web API サービス。(2020.12-2021.03, 2022.05)
去る2020年12月、ニコニコ実況 はニコニコ生放送内の一公式チャンネルとしてリニューアルされました。これに伴い、2009年11月から運用されてきた旧システムは提供終了となり (事実上のサービス終了)、torne や BRAVIA などの家電への対応が軒並み終了する中、当時の生の声が詰まった約11年分の過去ログも同時に失われることとなってしまいました。
そこで 5ch の DTV 板の住民が中心となり、旧ニコニコ実況が終了するまでに11年分の全チャンネルの過去ログをアーカイブする計画が立ち上がりました。紆余曲折ありほかの方が約11年分もの全チャンネルの過去ログを完璧に取得してくださったおかげで、11年分の過去ログが電子の海に消えていく事態は回避できました。
しかしながら、旧 API が廃止されてしまったため過去ログを API 経由で取得することができなくなったほか、約11年分の過去ログデータが合計約 150GB もあることからユーザー各自でダウンロードすることも非現実的で、とても以前のように手軽に過去ログに触れることはできなくなってしまいました。
一方、ニコニコ生放送内の一公式チャンネルとして移行した新ニコニコ実況では、タイムシフト(旧ニコニコ実況での過去ログに相当)の視聴期限は3週間までとなっているため、その期限を過ぎると過去ログは視聴できなくなってしまいます。また一般会員は事前にタイムシフト予約をしておく必要があるなど、以前のような利便性は失われています。
そうしたニコニコ実況の過去ログを取り巻く現状を改善すべく、旧ニコニコ実況の 2020/12/15 までのすべての過去ログに加えてコミュニティベースの番組も含めた新ニコニコ実況の当日分の過去ログを5分おきに収集し、取得したデータを XML 形式や JSON 形式で提供する、非公式の過去ログデータベース API を開発しました。
私が開発していた TVRemotePlus には、録画番組を視聴するときにニコニコ実況の放送当時の過去ログを同時に再生し、録画番組をコメントと一緒に楽しめる機能があります。
ところが、ニコニコ実況の過去ログが取得できなくなると過去ログを再生して視聴することができなくなってしまうため、急遽ニコニコ実況の終了間際に JKCommentCrawler と同時に数日間ぶっ通しで開発しました。2020/12/15 以降の新しいニコニコ実況の過去ログは、この JKCommentCrawler を使って5分おきに収集しています。
新ニコニコ実況がリリースされてからできるだけ早く公開する必要があったため、以前開発した 天気予報 API (livedoor 天気互換) のソースコードや HTML のデザインを流用して、わずか数日で開発開始からリリースまで漕ぎ着けました。今振り返ってもよく数日で作れたよな…と思います。
天気予報 API (livedoor 天気互換) 同様に Laravel 製です。とはいえ、簡素な API と言うこともあり、あまり Laravel の機能は利用していません。
2022年5月までは、この「ニコニコ実況 過去ログ API」のみ、Ubuntu 20.04 LTS の自宅サーバーにて稼働させていました。
収集した過去ログデータが 150GB もある (&今後もどんどん増えていく) ため、契約している ConoHa VPS のストレージにはとても収まらず、さらに追加でストレージを契約すると月数千円ほど取られてしまいます。継続運用のためにも維持費にあまりお金をかけられなかったので、ストレージが潤沢にある自宅サーバーで運用していました。
…ところが、自宅サーバーは他の用途 (個人的なファイルサーバー、諸々の開発、FFmpeg のビルド、ソフトの実験、などなど) にも多数活用していたため、たとえばビルド途中で過負荷で落ちてしまった時やミスでシャットダウンしてしまったなどで、数時間 API サービスが停止してしまうインシデントがしばしば起きていました。
自宅のブレーカーが落ちてしまい、復旧させたはいいものの電源を入れるのを失念してしまったことで、半日ほどサービスを落としてしまったこともあります。
自宅サーバーをそのまま公開するわけではなく VPS からの VPN 経由でのリバースプロキシという構成ではありましたが、どうしても自宅サーバーである以上不安定だったこと、自宅サーバーが落ちると「ニコニコ実況 過去ログ API」を利用している (おそらく) 数千人以上の方に迷惑をおかけしてしまうことなどを考慮し、2022年5月、サーバーを ConoHa VPS に移行しました。
もちろん、VPS で運用する場合はストレージの問題が出てきます。できるだけ維持費を抑えつつ安定稼働させるため、
- 約13年分の過去ログ全体 を GitHub に Git リポジトリとして公開する
- JKCommentCrawler は引き続き自宅サーバーで5分おきに動かす
- JKCommentCrawler で5分おきに過去ログを収集する毎に過去ログデータへの変更をコミットし、GitHub に Push する
- 「ニコニコ実況 過去ログ API」の過去ログの参照元をローカルのファイルシステムから GitHub の API に変更し、GitHub の API から過去ログを取得して、データを整形した上で XML または JSON で返す
という構成に変更しました。
5分に1回自動コミットされるため、運用開始から半年以上たった2022/11現在では49,937コミットと大変なことになっていますし、過去ログデータ自体2022/11現在では 170GB に膨れ上がっています。
とはいえ Git は Push する際に GZIP 圧縮がかかるため、実際に Push されているデータは 20GB 程度みたいです。未だ怒られてはいないので、今後も大丈夫だと信じたい (GitHub さんの寛大なインフラをありがたく使わせていただいています……) 。
ちなみに GitHub Actions で JKCommentCrawler を動かすことも考えたのですが、そもそもスケジュール実行に正確性がないこと、アメリカサーバーからの接続のためコメント取得が非常に遅いなどの問題があり、あえなく諦めました。
TVRemotePlus や KonomiTV だけでなく、ほかの方が開発された多くの DTV 関連ツールやコメントビューワーが常に依存している API のため、サービスを落としてしまったときのユーザーさんへの影響がとても大きいです。自宅サーバーでサービスを安定運用することの難しさを痛感させられました… (時代はやはりクラウド…)