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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скачать изображения из галереи

Ответить
Настройки темы
CMD/BAT - [решено] Скачать изображения из галереи

Новый участник


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

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


Здравствуйте!
Помогите написать скрипт - мне нужно скачать больше тысячи изображений с галереи derpiboo.ru, выбрав определенного автора. Вручную на это уйдет много времени и я задумался об автоматизации. Ничего, кроме cmd не знаю. Буду благодарен за готовый скрипт или хотя бы подсказки, с чего начать.

Отправлено: 17:37, 27-08-2013

 

Старожил


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

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


GreatAndPowerful, я намеренно не стал делать многопоточную версию. При указанных вами объемах это излишне нагрузит сервер дерпибуры. Имейте совесть, парни держат его на добровольные пожертвования.
Код: Выделить весь код
@Echo Off
:: Inquisitor, 2013
:: Ad majorem Applejack gloriam
SetLocal EnableDelayedExpansion

:: Настройки
Set API_Key=
Set Query=artist:aeronjvl,scenery,rainbow dash
Set Timeout=10
Set MaxImages=500
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: =+%
rem Делаем запрос к поиску
wget "http://derpiboo.ru/search.json?nocomments=1&nofav=1&q=%Query%&perpage=%MaxImages%&key=%API_Key%" -U "
%" -q -nc -O "%Temp%\derpibooru.json" 1>nul 2>nul||(Echo ERROR: Check your connection&Exit /B 1)
For /F "tokens=2 delims=:," %%A In ('grep -Eo ".id_number.:[0-9]*," "%Temp%\derpibooru.json"') Do (
	Call :GetImage %%A
	ping -n %Timeout% 127.0.0.1>nul
)
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 Получаем изображение
If Not Exist "%ImagesDir%\!file_name!!file_ext!" wget "!image!" -U "
%" -q -nc -O "%ImagesDir%\!file_name!!file_ext!" 1>nul 2>nul&&(Echo #%~1 retrieved)||(Echo ERROR: Couldnt retrieve image #%~1&Exit /B 1)
Exit /B 0
Для работы скрипта нужны wget и grep (хотел обойтись без последнего, но зачастую вес ответа достигает полумегабайта, и разбирать это таким же образом, как делается с картинкой, не представляется возможным). Обратите внимание на настройки:
API_Key - ключ для API, его можно посмотреть на странице своего аккаунта. Без него качать будет, но будет применяться фильтрация по умолчанию (т.е. отсекая NSFW)
Query - то же самое, что вы собираетесь писать в поиск. Тэги разделяются запятой, пробела перед и после неё быть не должно.
Timeout - настоятельно рекомендую не менять это. Не создавайте излишнюю нагрузку на сервер. Это интервал между запросами изображений.
MaxImages - количество изображений, скачиваемых за раз. Хоть несколько тысяч, выставьте столько, сколько планируете качать.
ImagesDir - куда сохранять.
Это сообщение посчитали полезным следующие участники:

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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


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

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


Спасибо, все работает! А можно все таки многопоточную версию? Медленно качает
И не поясните, как оно работает? Мне почти все непонятно. А если я изменить скрипт захочу?

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


Старожил


Сообщения: 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


Новый участник


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

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


Данный скрипт более не работает? Ведь уже столько времени прошло Помогите пожалуйста написать новый.

Отправлено: 17:00, 22-09-2015 | #5


Ветеран


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

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


Extazik, стучите ему в личку, он с августа не появлялся.

Отправлено: 17:10, 22-09-2015 | #6


Новый участник


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

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


Iska, окей )


А все же, как правильно запускаются такие скрипты? Может я как то не так это делаю.

Отправлено: 17:30, 22-09-2015 | #7


Ветеран


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

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


Так же, как и любые другие пакетные файлы.

Отправлено: 18:50, 22-09-2015 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скачать изображения из галереи

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сохранение изображения из Canvas xNiSSaNx Вебмастеру 0 20-06-2013 23:40
.NET Forge CMS становится частью галереи веб-приложений Web Application Gallery OSZone News Новости и события Microsoft 0 22-07-2011 17:30
[решено] скачать файл из инета из cgi-bin => location.replace AlexM AutoIt 3 24-01-2011 10:45
Разное - Извлечь изображения из папок 7human7 Microsoft Windows 2000/XP 4 06-05-2009 10:29
Скрипт галереи OxY Вебмастеру 2 09-01-2006 12:50




 
Переход