На днях пришлось пользоваться файлообменником files.mail.ru. Захотелось не просто скачать файлы в браузере, а написать скрипт для bash в linux. Как всегда мой выбор пал на wget. Кто-то может спросить — почему я пользуюсь wget, а не беру в основу своих скриптов более мощный curl. Все дело в том, что мне хватает функционала wget, если же что-то не смогу реализовать во wget, то обязательно воспользуюсь curl. Еще дело в том, что wget по-умолчанию присутствует в большем количестве linux систем.
Было решено, что скрипту для удобства и универсальности в качестве параметра командной строки будет передаваться или ссылка в полном формате (http://files.mail.ru/XXXXX), или же в сокращенном виде — только идентификатор файла на сервере (XXXXX). Для приема пользовательского ввода в bash скрипте применена следующая инструкция интерпретатору (иногда можно и по выпендриваться в выражениях :) ) uuid=`echo $1 | sed «s/http:\/\/files.mail.ru\///g»` В этой строке кода мы не только присваиваем переменной uuid значение пользовательского ввода, но и убираем из него «http://files.mail.ru/». Таким образом в переменной у нас будет храниться идентификатор файла на сервере.
Далее используем переменную uuid в парсинге прямой ссылки на файл. Для этого я применяю свою излюбленную утилиту grep. Первый раз я отсеиваю строку содержащую «linkcode» — там содержалась мешающая в дальнейшем ссылка внутри html исходника страницы (которую как видно мы скачали с помощью wget). Далее мы вытаскиваем с помощью того же grep строчки начинающиеся с http, содержащие «download», «uuid» и все оставшееся до символа двойной кавычки. На выходе получилось три одинаковых ссылки, которые мы встретили в теле документа. Далее стандартный вывод принимает на себя утилита uniq, которая выводит уникальные значения. А из трех одинаковых ссылок — она и вывела одну уникальную Далее эту ссылку мы передаем wget’у с параметром докачки. Закачивать с докачкой с помощью wget еще приятнее
Ниже привожу скрипт полностью. Его можно использовать передавая всего лишь идентификатор файла на сервере.
#!/bin/bash # #Made by Evginey Buchnev http://blog.buchnev.ru #Simple script to download files #from http://files.mail.ru # uuid=`echo $1 | sed "s/http:\/\/files.mail.ru\///g"` url=`wget -qO - http://files.mail.ru/$uuid | grep -v "linkcode" | grep -Po "http.+download.+$uuid[^\"]+" | uniq` wget -c $url
Кстати, удобно было бы сделать php обертку для него или же оформить cgi и не заходя на сервер по ssh закачивать файлы на свой дедик по http.
А пока писал пост, пришла мысль попробовать создать скрипт для загрузки файлов на files.mail.ru. Буду думать.
Все-таки потрясное изобретение — блог. Казалось бы обычный сайт, но изменили подачу информации, передали сайт в руки одного человека и открылась еще одна грань общения с миром.
Тяжело дается мне все это. Но благодоря вашей статье начал немного разбираться.