Понадобилась мне сегодня одна книжка по математике. Но вот беда — ее не оказалось в той библиотеке научно-технической литературы, которую на 35 дисках предлагают скачать на РуТрекере. Лет пять назад я в таких случаях пользовался «Электронной библиотекой мехмата МГУ», благо в alma mater на 15 этаже висела бумажка «сайт lib.mexmat.ru, логин mexmat, пароль mexmat». Но что знают двое — знает и свинья, поэтому эти логин с паролем распространились по всему интернету, попали в лапы правообладателей и те потребовали прикрыть лавочку, написав чуть ли не Лупанову (тогдашний декан мехмата) с Садовничим (а это ректор МГУ). Библиотека, естественно, закрыла доступ извне полностью, оставив его только для сети мехмата.
Тем не менее, через несколько лет от ЭБММ отпочковалась новая электробиблиотека ResLib.com — те же книги, но с доступом через Web и ограничением — не более 25 страниц за раз. На мое счастье, нужная мне книжка в ней нашлась. Но вот предложение читать по странице в полчаса, да еще и через неудобный Web-интерфейс мне показалось оскорбительным.
Я решил попробовать скачать эту книжку — есть у меня еще нехорошая привычка не доверять веб-сервисам. Мало ли — через неделю все закроется? Так что, посмотрев на код картинок, которые показываются при просмотре книг в этой библиотеке, я решил запустить свой любимый ReGet и воспользоваться в нем прекрасной опцией «создать нумерованный список». URL картинок выглядел так:
http://reslib.com/img2.php?b=635101403&s=l&p=1
Параметры обозначают следующее: b — идентификатор книги, s — размер картинки, нам нужен l, то есть large, p — номер страницы (видимо, «выдираются» они из djvu-файла). Запускаем ReGet и создаем нумерованный список — это замечательная фича, разработчиками упоминаемая, как «уникальная».
Запускаем закачки и… в директории, куда мы хотим скачать файлы, появляется файл img2.php (правда, Windows Explorer распознает в его содержимом png-картинку), а Регет бомбардирует нас несколькими десятками сообщений «файл уже существует, переименовать?». Непорядок. И оказывается, что в одном из лучших download-менеджеров нет никакого способа дать свои названия куче файлов, закачиваемых автоматически.
Правда, я все же обнаружил в ReGet так называемые «макросы», которые можно использовать для относительно массовых переименований закачек. Оказывается, что если объденить все файлы этой книжки в одну группу, то можно уже в группе задать правило, применяемое к тем файлам, для которых файл с тем же именем уже существует. Там есть выбор из нескольких настроек — «Спросить», «Переписать», «Переименовать» — и в случае переименования можно воспользоваться макросами. Обращу внимание почтенной публики на то, что в справке ReGet список макросов немного шире — в частности, имеется макрос Param, выдирающий из GET-запроса значение параметра с заданным именем. Как раз то, что надо — давайте назовем наши файлы page1.png, page2.png и так далее! Идем в свойства группы и ставим там такие настройки:
Теперь снова запускаем закачку, скачиваем пару десятков файлов уже с правильными названиями и на дальнейшие запросы получаем от сервера отлуп — «Ошибка 503, приходите позже». Ну я думаю, вы поняли? Сервер пытается «забанить» нас по IP-адресу. Меняем айпишник (кто пользуется proxy, кто «пересовывает» соединение с провайдером) и продолжаем. Итого — за 15 минут скачиваем книжку целиком.
Зачем я это рассказываю? Разумеется, не с целью ограбить онлайн-библиотеку — как вы видите, это может сделать каждый. Я хочу продемонстрировать, что даже в лучших программах «из мира Windows» какие-нибудь не очень тривиальные действия сопряжены с возникающими «из ниоткуда» трудностями. Windows-стиль не предполагает работу с командной строкой, а уж тем более — написание сложных скриптов на командном языке. А я более чем уверен, что на любом языке какого-нибудь Unix shell (или даже Windows Power Shell, или даже в обычном cmd.exe) написание скрипта, скачивающего ту же кучу файлов по маске, займет те же 15 минут, что я изучал документацию ReGet и придумывал способы обхода непонятно откуда возникших ограничений.
Да, пользоваться wget намного (или немного :) ) сложнее, чем ReGet или Download Master — но первый можно использовать в каких-то своих целях, а «качалки» из Windows — только в рамках того, что предусмотрели их авторы.
Я для таких целей когда то использовал программу Порнозавр. Она правда была предназначена для выкачивания порнушных галер оптом, но и драть сканеные книги тоже была горазда.
Можно было бы curl попробовать ;)
А в данном случае без разницы, что wget, что curl.