Цитата GreatAndPowerful:
А можно все таки многопоточную версию? »
|
Нет, нельзя. Причины я вам выше описал.
Цитата GreatAndPowerful:
И не поясните, как оно работает? Мне почти все непонятно. »
|
Может быть, уточните, что конкретно нуждается в разъяснении?
Общая логика скрипта такова: стартуем, создаём папку для картинок, удаляем результат поиска (если остался от предыдущего раза), с помощью ключа делаем запрос к API дерпибуры, разбираем полученный результат (JSON) с помощью грепа, выделяем ID изображений. Далее вызываем функцию, которая с помощью запроса к API получает сведения о файле - прямую ссылку и реальное имя, далее с помощью wget файл скачивается - и так, пока не будут обработаны все файлы из поисковых результатов.
UPD: Добавил новый вариант скрипта, который не нуждается в указании максимального количества результатов, а забирает постранично всё что есть.
Код:

@Echo Off
:: Inquisitor, 2013
:: Ad majorem Applejack gloriam
SetLocal EnableDelayedExpansion
:: Настройки
Set API_Key=
Set Query=artist:aeronjvl,scenery,rainbow dash
Set Timeout=10
Set ImagesDir=images
rem Подготавливаемся к работе
For /F "tokens=2 delims=[]" %%A In ('Ver') Do (For /F "tokens=2,3 delims=. " %%B In ("%%A") Do (Set Ver=%%B.%%C))
Set UA=Mozilla/5.0 (Windows NT %Ver%; wget 1.11) DerpibooruGrabber/1.0
If Not Exist "%ImagesDir%" MD "%ImagesDir%"
If Exist "%Temp%\derpibooru.json" Del "%Temp%\derpibooru.json"
Set Query=%Query: =+%
Set Page=1&Set Downloaded=0
:Search
rem Делаем запрос к поиску
Set Images=0
wget "http://derpiboo.ru/search.json?nocomments=1&nofav=1&q=%Query%&perpage=50&key=%API_Key%&page=!Page!" -U "
%" -q -nc -O "%Temp%\derpibooru.json" 1>nul 2>nul
For /F "tokens=2 delims=:," %%A In ('grep -Eo ".id_number.:[0-9]*," "%Temp%\derpibooru.json"') Do (
Call :GetImage %%A
Set /A Images+=1
ping -n %Timeout% 127.0.0.1>nul
)
If Not "!Images!"=="0" (
Set /A Page+=1
ping -n 10 127.0.0.1>nul
Del "%Temp%\derpibooru.json"
GoTo :Search
)
Echo All done
Pause&Exit
:GetImage
rem Запрашиваем данные о изображении через JSON API
Set file_name=&Set file_ext=&Set image=
For /F "delims=" %%A In ('wget "http://derpiboo.ru/%~1.json?nocomments=1&nofav=1" -U "
%" -q -O- 2^>^&1') Do (
rem Разбираем полученный JSON
For %%B In (%%A) Do (
For /F "tokens=1,* delims=:" %%C In ("%%B") Do (
For %%E In (file_name image) Do (
If "%%~C"=="%%E" Set %%E=%%~D
)
)
)
)
rem Обрабатываем результат
If Not Defined image Echo ERROR: Couldnt retrieve image info #%~1&Exit /B 1
For /F "delims=" %%A In ("!image!") Do (Set file_ext=%%~xA)
rem Получаем изображение
Set /A Downloaded+=1
If Not Exist "%ImagesDir%\!file_name!!file_ext!" wget "!image!" -U "
%" -q -nc -O "%ImagesDir%\!file_name!!file_ext!" 1>nul 2>nul&&(Echo !Downloaded! #%~1 retrieved)||(Echo ERROR: Couldnt retrieve image #%~1&Exit /B 1)
Exit /B 0