вторник, 30 апреля 2013 г.

Качаем с Danbooru пачками. Реванш.



И вот только я обрадовался, что покорил вроде бы все популярные галереи, как одна и них ясно дала понять, что всех не победить.
Теперь информацию о суммарном количестве постов через API получить быстро и точно не получится, да и процедура логина осложнилась. Пришлось опять вдумчиво читать документацию и включать соображалку.

Начал я с последнего. Авторизоваться можно не только через web, но и через API. Для этого нужен уже не пароль, а API-ключ, который можно подсмотреть на странице по ссылке "My Account" на сайте http://danbooru.donmai.us/
Свои логин и API-ключ надо вписать в начало скрипта.
Осталось получить количество постов по выбранной комбинации тегов за минимальное количество запросов. Я мудрить не стал и сделал всё с помощью простого перебора и параллельного складывания найденных ссылок на изображения в файл.
Ну и сам скрипт:

#! /bin/bash

# настройки логина
danlogin=ЛОГИН
apikey=API-КЛЮЧ

if [ ! -d $2 ]
then
echo Creating $2
mkdir "$2"
fi
echo Entering $2
cd "$2"

# Чистим
rm -f get2.danbooru.txt

# Топаем до пустой страницы
postcount=100
page=0
until [ $postcount -eq 0 ]
do
  curl "http://${danlogin}:${apikey}@danbooru.donmai.us/post/index.xml?tags=${1}&limit=100&page=${page}" > danout.dat
  let "page=page+1"
  postcount=`cat danout.dat|pcregrep -o -e 'file_url=[^ ]+'|sed -e 's/file_url=/http\:\/\/danbooru\.donmai\.us/g' -e 's/\/>//g' -e 's/\"//g'|wc -l`
  cat danout.dat|pcregrep -o -e 'file_url=[^ ]+'|sed -e 's/file_url=/http\:\/\/danbooru\.donmai\.us/g' -e 's/\/>//g' -e 's/\"//g' >> get2.danbooru.txt
done

wget -nc -i get2.danbooru.txt

# уборка
rm -f danbooru.txt danout.dat


Используется он так же, как и старый:
danbooru.sh сочетание_тегов папка_назначения