tumblrの画像を一括ダウンロードするスクリプト

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ユーザが存在しない場合、ファイルが削除できなかった場合など、例外処理はまったく書いていなかったり、一回で済むような処理を分けて書いていたりと、トライアンドエラーの跡が残ったままですので、もし流用する場合には適宜書き換えてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください