ニコニコ動画がサイト全体のメンテナンス状態になってしまうと、APIからのレスポンスも返ってこなくなりますが、ニコニコAPIでエラー処理を全く付けていなかったこともあり、ニコニコAPIを利用していた「画像掲示板の泉」でPHPのWarnningが発生してしまっておりました。

APIへの接続時にPHPのストリームコンテキストでステータスを事前に取り、HTTPヘッダを含むストリームコンテキストで200がきっちり返ってきた時だけ処理を走らせるといった、エラー処理用サンプルコードをこの記事ではご紹介しています。

画像掲示板でエラーが発生

画像掲示板の泉」で、「ツイッターのフォロワー募集板」のようなものを作ってみようと思い付き、夜中にプログラム修正をしつつテスト投稿をやっていたところ、投稿時にエラーが表示され始めるようになってしまい、慌てて修正前バージョンに戻すといったことをやっておりました。

とはいえ、プログラムを元に戻してもまだエラーが継続する状態となってしまったので、エラーログをしっかり見てみると、ニコニコ動画APIへの接続あたりでエラーがでていることが分かりました。

ローカルの投稿データ保管用ログファイルを何かの拍子に壊したかな?とは思い、投稿データ保管用ログファイルを見直したりしておりましたが、全部の板で同様のエラーがでてしまっているようで、原因が違うところにあるのかとは思いました。

ニコ動APIのエラー

掲示板にニコニコ動画の埋め込み処理をしていた10年前頃に書いたコードを再度見直してみると、ニコニコAPIにクエリを投げてサムネイル画像を取ってくるあたりでエラーとなっていることが分かりました。

$Q = "https://ext.nicovideo.jp/api/getthumbinfo/".$line_array;
$P = xml_parser_create();
xml_parse_into_struct($P,file_get_contents($Q),$vals,$index);
xml_parser_free($P);

10年前のAPI仕様を見て書いたコードだったので、APIが遂に終わったんだろうとは思い、APIの仕様を改めて調べてみるかと久々にニコニコ動画に行ってみたところ、こんな感じになってました。

ニコニコ動画の緊急メンテナンスイメージ
ニコニコ緊急メンテナンス

ニコニコ緊急メンテナンス

ニコニコ動画、静画、生放送といったサービスが全部止まっておりました。どうやら緊急メンテナンスを実施しているようです。これに伴い、APIサービスも死んでしまったようです。

ニコ動緊急メンテ対応

先程のコードを見て分かると思いますが、エラー処理も全くせずにfile_get_contents()でクエリを投げつけてしまっておりましたので、レスポンスデータが無い変数をPHPがパースしようとして、Warnningがでてしまっていたということのようです。

PHPのストリームコンテキスト

PHPではストリームというデータ入出力を包括する機能があり、file_get_contents()もこの機能が使えるようでしたので、ストリームコンテキストでエラー処理を無視して取ってきて、HTTPヘッダがステータス200だったら処理をするといった少々強引なエラー回避法を備えることにしてみました。

‘ignore_errors’ => true を指定してAPIからのHTTPステータスを取り、200だったらパースに進むといった感じで書き直してみました。

サムネイル画像を取ってくるだけなので、取れなかったらデフォルト画像でもはめこんでしまえという適当なエラー回避処理という感じですが、これでメンテナンス時にPHPがエラーをがでることは回避できるようになりました。

$Q = "https://ext.nicovideo.jp/api/getthumbinfo/".$line_array;
//ストリームコンテキスト作成
$context = stream_context_create(array(
 //エラー無視
 'http' => array('ignore_errors' => true)
));
$response = file_get_contents($Q, false, $context);
$pos = strpos($http_response_header[0], '200');
if($pos != false){
 $P = xml_parser_create();
 //サムネイル画像を取る
}else{
 //デフォルトのサムネイル画像はめこむ
}

おわりに:ニコニコ動画API

APIのリクエストURLは10年前からある動画情報取得用のgetthumbinfoを使っていますが、ニコニコ動画APIのページを見ると、何年か前に動画検索APIも用意されているようで、今はスナップショット検索API v2というものにバージョンアップまでされているようでした。

スナップショットAPIを見ると色々とデータが取れそうです。

titleタイトル
descriptionコンテンツの説明文
viewCounter再生数
mylistCounterマイリスト数またはお気に入り数
lengthSeconds再生時間(秒)
thumbnailUrlサムネイルのURL
startTimeコンテンツの投稿時間
lastResBody最新のコメント
commentCounterコメント数
lastCommentTime最終コメント時間
categoryTagsカテゴリタグ
tagsタグ(空白区切り)
tagsExactタグ完全一致(空白区切り)
genreジャンル
genre.keywordジャンル完全一致

同じように、YouTubeにもAPIは用意があるので、この2つを合わせて動画横断検索でも作ったら面白いかもしれないですね。

それにしても、ニコニコ動画でぐぐると「ニコニコ動画 メンテナンス」といったサジェストが出るくらいに最近はメンテナンスが増えているようですが、大丈夫なんでしょうか。