Качаем видео с agata.ru

Так получилось, что отоспался на эти выходные днём. А ночью наконец занялся давно отложенной задачей - вытащить все концертные видео с сайта agata.ru, которые, с некоторых пор, выложены там в формате флеш, причём мне не удалось найти ни один сайт или программу, которые были-бы способны скачать что-то кроме крохотного flashplayer.swf.



Ранее, изучение html кода не позволило мне найти ссылки на видео в явном виде. Оказалось, невнимательно смотрел. Можно было последовательно посмотреть все видеофайлы в браузере, а затем вытащить все из кэша, однако через короткое время файлы оттуда пропадали. Делать жесткие ссылки вручную или, тем более, писать скрипт мне было лень.

Захожу на http://agata.ru/video/epilog-predislovie-minsk.php, внимательно изучаю html-код страницы. Понял, почему я раньше не увидел ссылку на видео - искать надо было не swf, а flv.



agata.ru/video/opium_vid.php:SWFObject("flvplayer.swf","single","350","270","7"); s1.addParam("allowfullscreen","true");
agata.ru/video/opium_vid.php:s1.addVariable("file","/flash/opium_sm.flv"); s1.addVariable("image","");
agata.ru/video/chernaja_luna95.php:
agata.ru/video/epilog-morjak-nijnij_novgorod.php:


Далее необходимо получить все ссылки. Чтобы не тратить время, даю задание wget:
 wget -r -l 2 --no-parent --domains agata.ru --page-requisites --restrict-file-names=windows --no-clobber --limit-rate=50k -w 3 -c   http://agata.ru/video/epilog-predislovie-minsk.php

Что это значит: -r - рекурсивно качать файлы по ссылкам, -l 2 - только до второго уровня вложенности, --no-parent - не забираться вверх по дереву каталогов, --domains  - только для указанного домена, --page-requisites - качать все файлы, необходимые для правильного отображения страницы, --restrict-file-names - для правильной трансляции имен, чтобы они могли быть прочитаны в windows, --no-clobber - не перезаписывать файлы, --limit-rate и -w - чтобы не создавать излишнюю нагрузку на сайт, -c продолжать. Однако, после ошибки, качалка говорит, что файл существует, поэтому rm -rf * и начинаем все сначала.

По правде говоря, была небольшая надежда, что с такими опциями wget сама все вытащит, но она не оправдалась.

Далее долго разбираюсь, как-же вытащить только ссылки в нужном формате. Строки содержат разное количество параметров, поэтому, используя cut и awk в простом виде, ничего не получается. Долго пытаюсь заставить работать sed и awk.  Но, полчаса поиска в гугле и чтения манов дают результат, поражающий своей простотой и наглядностью :)

 grep -PoRh '/flash/.*.*flv' *|awk '{print "http://agata.ru"$1}'

Рассмотрим подробнее:
-P - интерпретировать шаблон, как регулярное выражение perl,
-o - печатать только то, что соответствует регулярному выражению, а не всю строку,
-R - рекурсивно обрабатывать файлы,
-h - не печатать имена файлов.

awk просто подставляет правильное начало строки. Уверен, что можно обойтись и без конвейера.

Voila! Все 76 ссылок автоматически извлечены. Осталось добавить | xargs wget к команде, чтобы скачать все найденное.

Комментарии

Популярные сообщения из этого блога

Система защиты от протечек Нептун Ложные Срабатывания

Apache Superset. Unable to login with default login password Docker.

LibreNMS tips and tricks