пятница, 13 ноября 2009 г.

Качаем картинки пачками. Решение умное.

Прошлый пост говорил о решение проблемы с скачиванием картинок "в лоб". Вдумчивое курение Danbooru API на пару с DartWantuz позволило найти более элегантное решение.
Мой вариант на коленке со старыми куками:
#! /bin/bash

uag="Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729)"
postcount=`curl -b $2 "http://danbooru.donmai.us/post/index.xml?tags=$1&limit=1"|pcregrep -o 'posts\ count=\"[^"]+'|sed -e 's/posts\ count=//' -e 's/\"//'`

rm -f get2.danbooru.txt

let "pcount=postcount/1000+1"

for ((i=1; i<=$pcount; i++))
do
  wget "http://danbooru.donmai.us/post/index.xml?tags=$1&limit=1000&page=$i" --load-cookies="$2" -U "$uag" -O - |pcregrep -o -e 'file_url=[^ ]+'|sed -e 's/file_url=//g' -e 's/\"//g'  >>get2.danbooru.txt
done;

wget -nc -i get2.danbooru.txt
Запуск: %scriptname% тег файл_с_куками

Его вариант с логином:
#!/bin/bash
TAGS=$(echo $* | sed -e 's/ /%20/g')
# опять эти пробелы...
LOGIN='login'
PASSWORD='password'
# сцука, настройки
AUTH=`curl -s -c danbooru.txt -F"commit=login" -F"url=" -F"user[name]=${LOGIN}" -F"user[password]=${PASSWORD}" \
         http://danbooru.donmai.us/user/authenticate`
# получаем кукисы с доставкой до danbooru.txt
XML=`curl -b danbooru.txt -s "http://danbooru.donmai.us/post/index.xml?limit=1000&tags=${TAGS}&page=1"`
TOTAL=$(echo $XML | egrep -o "[0-9]+" | head -n 4 | tail -n 1)
# получаем кол-во страниц
[ $TOTAL -le 1000 ] && TOTALPAGES=1 || TOTALPAGES=$(($TOTAL / 1000))
# считаем уже не так хитропопо, в отличии от гельбуры

echo "TOTAL ${TOTAL} images"
while [ $TOTALPAGES != 0 ]; do
curl -b danbooru.txt -s "http://danbooru.donmai.us/post/index.xml?limit=1000&tags=${TAGS}&page=${TOTALPAGES}" \
        | egrep -io "http:\/\/danbooru\.donmai\.us\/data\/[a-z0-9]+\.(jpg|png|gif|jpeg)" | uniq \
        | xargs -d '\n' wget -P files
# берём за рога, и качаем, и качаем
let 'TOTALPAGES--'
done
rm danbooru.txt
# удаляем файл с куками, дабы не оставить следов
Запуск: %scriptname% список тегов

Если "интузязизьм" не угаснет, то будет универсальный скрипт для нескольких подобных галерей.