2005-05-27

Amazon の画像をローカルに保存 |Amazon|ChangeLogメモ|Perl|wget|

山下さんが、「10年後のためにやっておいた方が良さそうなこと」にて Amazon アソシエイトが提供する広告用の画像をローカルに保存する方法を書いている。本来、 Amazon が提供する画像は、著作権の問題があるので、 Amazon への直リンクが推奨されている。だけど、十年も経った時にその画像へのリンクが残っている保証はないし、 ChangeLog メモのようにローカルで Blog を参照できるシステムでは困ってしまう。そこで、

もちろん現在の商品紹介でローカルに保存した画像を使うことはありません。 あくまで未来へ向けての保存用です。

ということで画像をダウンロードしておく。

Hack

この Hack には Perl と GNU wget を使う。対象は Amazon アソシエイトの画像を含む HTML ファイル。でも山下さんの Hack を見ると、 wget を画像の数だけ呼び出すようになっている。

  wget http://images-jp.amazon.com/images/P/4274065979.09.THUMBZZZ.jpg
  wget http://images-jp.amazon.com/images/P/B0007V1SSA.09.THUMBZZZ.jpg

wget-i オプションを使う方が、システムの負担が小さいと思う。というわけで、quick hack。

 % perl -F"<" -ane 'for(@F){$hash{$1}++
 if(m|(http://.+?/images/P/.+?.jpg)|)}
 END{for(keys%hash){print"$_\n"}}' *.html > a.txt

生成した a.txt を wget で処理する。既にある画像を対象から外すには、次のようにすればよいかな。

 % wget -N -i a.txt

2 comments:

  1. 画像はローカルにダウンロードしておいた方がよさそうですね。そう思いながらも上手いやり方が思いつかなくて・・・

    早速、真似させてもらいました。
    ところが、うちのブログでは、htmlではなくPHPなのとファイルが直下ではなく./archives/YYYY/MM/DD/HHMM.phpなのでちょっとだけ改造しました。

    コマンド最後の"*.html"は`find ./archives/ -type f -name "*.php"`に置き換えてます。その場しのぎだが、とりあえずこれでいいかと。

    では。

    ReplyDelete
  2. ムム。参考になります。バッククォートを使って find を呼ぶ所がミソなわけですね。

    ReplyDelete