Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Цитата 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

Последний раз редактировалось Anonymоus, 27-08-2013 в 22:30. Причина: Новый вариант скрипта

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:20, 27-08-2013 | #4