AWSをガリガリいじってたら、通常の画像はimage/jpegなのに対して1*1のダメ画像はimage/gifなことにふと(今さら)気づいた。ので、画像置換のためのチェック方法にはContent-Typeを利用する方法もあるわけ。てかAmazon Hacksに載ってるらしいです(持ってない)。

Content-Typeがimage/jpegな場合はちゃんと画像がある(はず)なので、チェックするためのコードはこんなシンプルなものでOKなはず。

use LWP::Simple;

sub check_image {
  my $url = shift;

  my $header = head($url);

  return 1 if $header->content_type eq "image/jpeg";
  return 0;
}

とか書いたけど、ちゃんとした画像がimage/gifだったりすることもあるかもなぁ。いまいち一貫性に欠けるところがあるので信用できない(偉そう)。

Content-Lengthでチェックする場合はこんなコード。

use LWP::Simple;

sub check_image {
  my $url = shift;

  my $header = head($url);

  return 1 if $header->content_length > 807;
  return 0;
}

どっちにしても、失敗する時は失敗する気がする。しかも結構頻繁に。

そもそもAWSがきちんとしたURLを返さないのが悪い。とか、いつも思うわけで。

ちなみに、アメリカからの輸入盤CDの画像は01で取れますが、イギリスからの輸入盤CDの画像は09だったり(ドイツからの輸入版CDとかは知らない)。マメ知識。輸入版なら01に置換すれば安牌というわけではないってこった。Content-TypeContent-Lengthでチェックしたほうが良いすね(コストかかるけど)。そもそもAWSが(以下略。