|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скачать изображения из галереи |
|
CMD/BAT - [решено] Скачать изображения из галереи
|
Новый участник Сообщения: 4 |
Здравствуйте!
Помогите написать скрипт - мне нужно скачать больше тысячи изображений с галереи derpiboo.ru, выбрав определенного автора. Вручную на это уйдет много времени и я задумался об автоматизации. Ничего, кроме cmd не знаю. Буду благодарен за готовый скрипт или хотя бы подсказки, с чего начать. |
|
Отправлено: 17:37, 27-08-2013 |
Старожил Сообщения: 415
|
Профиль | Отправить 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 API_Key - ключ для API, его можно посмотреть на странице своего аккаунта. Без него качать будет, но будет применяться фильтрация по умолчанию (т.е. отсекая NSFW) Query - то же самое, что вы собираетесь писать в поиск. Тэги разделяются запятой, пробела перед и после неё быть не должно. Timeout - настоятельно рекомендую не менять это. Не создавайте излишнюю нагрузку на сервер. Это интервал между запросами изображений. MaxImages - количество изображений, скачиваемых за раз. Хоть несколько тысяч, выставьте столько, сколько планируете качать. ImagesDir - куда сохранять. |
Отправлено: 20:32, 27-08-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Спасибо, все работает! А можно все таки многопоточную версию? Медленно качает
![]() И не поясните, как оно работает? Мне почти все непонятно. А если я изменить скрипт захочу? |
Отправлено: 20:48, 27-08-2013 | #3 |
Старожил Сообщения: 415
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Данный скрипт более не работает? Ведь уже столько времени прошло
![]() |
|
Отправлено: 17:00, 22-09-2015 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Extazik, стучите ему в личку, он с августа не появлялся.
|
Отправлено: 17:10, 22-09-2015 | #6 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Iska, окей )
А все же, как правильно запускаются такие скрипты? Может я как то не так это делаю. |
Отправлено: 17:30, 22-09-2015 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Так же, как и любые другие пакетные файлы.
|
Отправлено: 18:50, 22-09-2015 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сохранение изображения из 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 |
|