妻がはてなフォトライフに上げている写真を自作の写真管理ツールに取り込もうと思って一括ダウンロード機能を探したが、公式の機能としてはないらしい。ただ、幸いにしてRSSでURLが取れるので、フォルダ分けやアクセス制御をしていなければ、簡単なスクリプトで一括ダウンロードできることがわかった。
以下のスクリプトを実行するとURLの一覧が標準出力される。accountの部分はユーザ名を指定する。
require 'open-uri' account = 'foobarbaz' page = 1 while true rss_url = "http://f.hatena.ne.jp/#{account}/rss?page=#{page}" url_count = 0 open(rss_url) { |file| file.each_line { |line| line.chomp! next if !line.match(/<hatena:imageurl>/) line.sub!(/.*<hatena:imageurl>/, '') line.sub!(/<.*/, '') line.strip! next if !line.match(/^http:\/\//) url_count += 1 print("#{line}\n") } } break if url_count < 10 page += 1 end
あとは、この出力をファイルに保存して、wget -iとかでダウンロードすればOK。元画像だけ欲しい場合には "_original" とかでgrepかければOK。日付とかで絞り込むのも一興。
データはAkamaiに置いているっぽいのでシーケンシャルにダウンロードする分にはサーバ側が過負荷になることはないだろうが、ダウンロードの速度や頻度を社会通念上の許容範囲内にすべきことは言うまでもない。
上記だとフォルダ分けしている場合にはうまく動かない。が、俺のユースケースではないのでどうでもいい。