Linux, парсинг files.mail.ru и скрипт скачивания в консоли

Файлообменник от mail.ruНа днях пришлось пользоваться файлообменником  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. Буду думать. :)

Linux, парсинг files.mail.ru и скрипт скачивания в консоли: 2 комментария

  1. goglopseg

    Все-таки потрясное изобретение — блог. Казалось бы обычный сайт, но изменили подачу информации, передали сайт в руки одного человека и открылась еще одна грань общения с миром.

Добавить комментарий для goglopseg Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>