tumblrの画像を一括ダウンロードするbash向けシェルスクリプトを書いてみました。
あまり効率的ではないですが、投稿を1ページずつ取得して、含まれる画像を抜き出しています。また、ダウンロードが完了したらZIPファイルに固めてくれます。
[bash]
!/usr/bin/env bash
#
simple picture downloader for tumblr
#
written by dyama (https://dyama.org/), Feb 1 2013
#
usage:
gettumblr http://example.tumblr.com/
function gettumblr()
{
url=$1
# fix the url
url=${url#http://} # this pattern is not regex!
url=${url%%/*}
# check the url and get tumblr user acount
if [[ $url =~ ^([a-z0-9]+)\.tumblr\.com$ ]]; then
USER=${BASH_REMATCH[1]}
echo OK, Target user name is $USER. >&2
else
echo Error: $url is not tumblr URL. >&2
return 1
fi
# working directory
wdir="/tmp/gettumblr$$"
if [ ! -d $wdir ]; then
mkdir $wdir
if [ $? -ne 0 ]; then
echo Error: Cannot make working directory at $wdir. >&2
return 1
fi
fi
pushd $wdir
for i in {1..999};
do
echo Getting posted page $i ... >&2
wget -O - -q "http://$url/page/$i" | grep -oE 'http[^"]+post[^"]+' \
| grep $USER > list
[ $? -ne 0 ] && break;
echo -e '\tGetting included image ...' >&2
grep -v frame list | wget -q -i - -O - | grep 'og:image' \
| grep -v facebook | grep -oE 'http[^"]+' | wget -i - -nv
done
file=$wdir/tumblr_$USER.zip
zip $file *
popd
mv $file .
rm -rf $wdir
echo Done. >&2
}
gettumblr "$*"
exit $?
[/bash]
関数 gettumblr() の冒頭部分のパターンによる変数保持値の編集や正規表現パターンマッチ構文は、bash依存です。また、grep の -o オプション(パターンに一致した行の、パターンに一致した部分だけを標準出力に印字する)も多用しています。このオプションは古めの grep にはなかったはずなので、注意が必要です。
ターゲットのtumblrユーザが存在しない場合、ファイルが削除できなかった場合など、例外処理はまったく書いていなかったり、一回で済むような処理を分けて書いていたりと、トライアンドエラーの跡が残ったままですので、もし流用する場合には適宜書き換えてください。