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

とはいえ、戻してもまだエラーが出る状態で、エラー内容をよく見てみると、ニコニコ動画のURLアップロードあたりでエラーがでているようです。

ログファイルを何かして壊したかな?とは思いまして、ログファイルを眺めてみたりしてみましたが、他の板もみると、全部の板で同じようなエラーがでてしまっているようで、もう一度コードをしっかり読み直してみることにしました。

とはいえ、この運営ブログをみてもニコニコ動画の貼り付け対応をさせたのは10年前頃で、読み直すのにかなり苦労しましたが。。

見ると、ニコニコのAPIにクエリを投げてサムネイルURLを取ってくるあたりでエラーになっている感じでした。

$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);

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

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

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

どうやらニコニコ動画、静画、生放送といったサービスが全部止まっているようで、それらと同じようにAPIも死んでしまっているようでした。

先程のコードをみてわかると思いますが、エラー処理も全くなしでfile_get_contents()でクエリを投げつけてしまっていたので、レスポンスも無いのにパースしようとしてWarnningがでてしまっていたということのようでした。

ということで、ストリームコンテキストで ‘ignore_errors’ => true を指定してステータスをとりあえず取りに行って、200だったらパースに進むといった感じに書き直しました。サムネイル画像を取るだけなので、取れてなかったらデフォルト画像でもはめこんでおけばOKという適当な感じです。

$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のリクエスト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つを合わせて動画横断検索でも作ったら面白いかもしれないですね。

スポンサーリンク