ニコニコ動画がサイト全体のメンテナンス状態になってしまうと、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つを合わせて動画横断検索でも作ったら面白いかもしれないですね。

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

ABOUT dtn.jp

この運営ブログをみてdtn.jpの運営サイトに興味をお持ちになった方は下記のリンク集からサイトをご参照ください。PHP・SQL・JS・HTML・CSSや様々なAPIでゼロから立ち上げたサイトを複数運営しています。

dtn.jp関連サイト

  • ディレクトリ型検索エンジンdtn大手サイトは全てサービスを終了し、中小でも運営を継続するところがほとんどなくなってしまったディレクトリ型検索エンジンを2002年から細々運営しており、未だに細かい機能改修も行っております。申請されたサイトは実際に訪問して細かく確認をしているので登録までかなりお時間いただきます。
  • 猫ネコサーチエンジン猫・ペットサイト専用のディレクトリ型検索エンジンです。登録サイトはサイトのスクリーンショット付きでカテゴリに掲載しています。
  • 画像掲示板の泉画像やYouTubeやニコニコ動画が貼り付け可能な匿名画像掲示板です。27ジャンルに分かれた掲示板に、それぞれ100スレッドまで立てることが可能です。
  • ツイータンTwitter APIを使って10分おきに収集したTwitter(ツイッター)のトレンドワードや人気ハッシュタグデータを月別に集計してランキング形式で公開しています。
  • Keyword Tool++Yahoo APIや楽天サイトのデータを日次で収集したデータを元に、EC系キーワードをラインキング形式でご紹介しています。各ワードは検索ボリュームや関連語、24か月の検索ボリュームトレンドを確認も可能です。
  • 消費者金融の泉カードローン商品を取り扱う金融業者を一覧で比較可能としたサイトです。カテゴリ別、人気度別、限度額別、金利別に比較可能なサイトにしています。
  • TrendinGファッションモールに出店するブランドをアイテムヒット率でランキングとしたサイトです。まだβ版です。

各サイトの開発方法などについて

各サイトの開発方法や運用トラブルについては、当ブログで不定期にご紹介しています。Twitterで新着記事のお知らせもしています。宜しければフォロー下さい。