任意のtumblrのPictureだけを一括ダウンロードしてハァハァする

tumblrっていうミニブログとクリッピングとソーシャル的な何かが一緒になったようなWebサービスにハマっている。多分使い方が間違っている気がするけど、僕は「2次元絵を集めまくる」のに使っている。

集めまくるのはまぁいいとしてWebで過去ログをブラウジングして、さかのぼって見るのって時間がかかる。MacのCoverFlowとか携帯とかで見まくって、つかの間の脳内ワールドにスムーズに酔いしれたい。

思い立ったが吉日。一括ダウンロードスクリプトを作った。

「tumblrget.sh」

スクリプトの

#tumblrのarchiveURL
DOMAIN=http://hogehoge.tumblr.com/archive

のURLを任意のtumblrのドメインに書き換えて上書き。MacだかLinuxだかのUNIXコンソール上でダウンロードしたスクリプトと同じディレクトリで

$ ./tumblrget.sh

と打てば、色々ファイルが出来てdataフォルダの中にガツガツファイルがダウンロードされる。また、以前の最新画像URLを記録しているのでtumblrに新規で画像を追加した際に再度コマンドを打てば差分だけダウンロードしてくれる。

20071214image024




tumblrの画像URLのポイントはダウンロードURLの末尾を500にすると高解像度のデータがダウンロードできるところ。tumblrの画像は複数解像度を保持しているのか動的に生成しているのかわからないが、URLの末尾を引数にしてXML-RPCによって画像を返却している。なぜXML-RPCと推測できるかというと500と250以外の適当な数字を入れるとエラーメッセージがXMLで返ってくるから。ということは、動的に生成しているのかな。でもそれにしては返却されるスピードが結構速い。もしかしたらノードを分散して格納している画像を呼び出すのに使っているのかもしれない。

末尾にソースを添付しておく。間違いあったら誰か教えてクレクレ君。

tumblrget.sh:タンブラーをゴリゴリダウンロードするシェルスクリプト

#!/bin/bash

# archive :wgetしたテンポラリデータ
# resenturl.txt :収集済み直近の画像URL
# regeturl.txt :今回取得する画像URLリスト
# geturl.txt :直近で取得した画像リストpx200版
# geturl500.txt :直近で取得した画像リストpx500版

#tumblrのarchiveURL
DOMAIN=http://hogehoge.tumblr.com/archive

#収集済み直近の画像URL
VARURL=`head -1 resenturl.txt`

#最新imgURLリスト取得
rm -rf geturl.txt
rm -rf archive
echo "get archive list."
wget -nv $DOMAIN
grep background\:url archive | awk -F \' '{print $2}' > regeturl.txt

#更新がなければ終了
if [ `head -1 regeturl.txt` = "$VARURL" ]; then
echo "tumblr nochanged."
exit
fi

#収集済みURL以降のURLを抜く
while read line
do
if [ "$line" = "$VARURL" ]; then
break
fi
echo $line >> geturl.txt
done < regeturl.txt

#最新URLを書き換え/最新URL更新/大画像リスト取得
echo "tumblr added "`cat geturl.txt |wc -l`" pictures."
head -1 geturl.txt > resenturl.txt
sed "s/_250/_500/" geturl.txt > geturl500.txt

echo "get archive..."
wget -i geturl500.txt -P ./data/
echo "got. ended."