101.ru-плеер для красноглазых

Давным-давно бродили по земле динозавры, климат был мягче, люди приветливей, политики скромнее, компы слабее, а графических интерфейсов не было вовсе и все пользовались консолью для решения своих задач. Я эти времена не застал: по молодости лет, сразу оказался напротив 95-ой винды. Впрочем, тогда я об этом ни капельки не жалел. Но про волшебную тогда консоль наслышан был немало и испытывал перед ней паническое уважение. По прошествии многих лет ситуация кардинально изменилась и сейчас терминал - первая программа, которая запускается после загрузки системы, MC пришёл на смену TC, mplayer - LA и т. д.. Да что там говорить, даже радио слушается нынче через терминал. Об этом и пойдёт здесь речь.

Маловато уже, наверное, людей, которые не слышали про сервис 101.ru. Сервис действительно весьма хорош: большой выбор станций, глюки весьма редки, приемлемое качество потока. Но у него есть крупный недостаток: слушать его можно только через браузер. А это тянет за собой кучу неприятностей, как то: флэш-плеер (а под линуксом это стабильно отожранные 30-40% процессора), надоедливая реклама, запущенный браузер в конце концов. В довесок, после 4-5-ичасового прослушивания браузер начинает отжирать весь процессор и немало памяти. Лечится это перезапуском браузера, а у меня браузер, как правило, запускается только один раз утром. Как-то раз мне это надоело, я вооружился файрбагом и нашёл прямой линк на поток. Обычно я слушаю блюзовую станцию и её урл таков: http://fr1.101.ru:8000/c5_2. Привычно забиваю в терминале команду:

$ mplayer http://fr1.101.ru:8000/c5_2

И слышу в ответ, вместо 12 тактов блюза, молодой мужской голос, издевательски мне сообщающий, что де 101.ru нельзя слушать через плеер, так что вперёд, включай браузер и слушай через него. Снести такое оскорбление я не смог и начал разбираться. Файрбаг, гениальное изобретение, помог определить, что проблема в хидерах запроса. 101.ru парсит User-Agent и отдаёт поток только известным браузерам. mplayer запрос с хидерами посылать не умеет, так что пришлось воспользоваться wget-ом:

Хе-хе, тянется родимый, тянется. Теперь в соседнем табе:

А теперь и проигрывается.

Проблему можно было считать решённой, но мне не давали спокойно жить некоторые мелочи:

  • ну не хорошо это - два таба держать ради радио;
  • не видно исполнителя и название композиции;
  • довольно скоро выходной файл стал раздражать своим размером.

Было решено обрушить на 101.ru всю мощь bash-а, точнее ту её часть, которой я владею. Как только выдалось время, набросал маленький парсер специально под 101.ru. Итак, знакомьтесь, скрипт 101ply. Ниже будет дан линк для скачивания, а пока я попотчую вас парочкой скриншотов:
Скрипт принимает один параметр: номер станции. Если запустить его без параметра, он полезет на сайт, распарсит его и выдаст список доступных станций с их номерами:

Станций там, на самом деле, сотни полторы. Вводите номер, скрипт запускает сам себя с параметром и начинается проигрывание:

Прогрываемые файлы складируются в /home/<имя пользователя>/.101ply/store/<название станции>. Впрочем, если изменить директиву STORE_SONGS в скрипте на "0", то файлы сохраняться не будут.

Сам код скрипта приводить здесь не стану, по причине приличного объёма последнего. Кому интересно, вот линк для скачивания.

PS: Код сырой, и имеет большушую проблему со сценарием завершения: wget остаётся висеть в бэкграунде и тянуть поток в файл композиции, которая проигрывалась последней. Его надо убивать вручную. Как решу эту проблему, выложу изменения.

PS2: Скрипт был написан в образовательных и спортивных целях и посвящается всем красноглазым. Надеюсь, это замечание успокоит любителей пошвырять помидоры типа "нахрен не надо", "аффтор идиёт" и пр. Сам скрипт можете вертеть так и эдак и пользовать на своё усмотрение. Лицензионной защиты не предусмотрено специально.

PS3: Во время написания скрипта, никто, кроме гугля, не пострадал.

zash (not verified)Sun, 2011-04-10 11:49
Поставил себе на работе линукс, и решил попользоваться твоим мегаскриптом. Но после запуска скрипта и установки некоторых пакетов, музыки я так и не услышал. Скрипт вылетал с ошибкой mplayer-a "File not found". Я уж подумал что 101.ru изменили что-то на своем сайте и теперь уже link на поток не тот, но оказалось все гораздо проще: Если в названии радиостанции есть пробел то параметры для mkdir передаются неправильно, поэтому папку нужно взять в кавычки. 64: mkdir -p "$LOCAL_STORE" А сам скриптец порадовал немерянно :) Успехов тебе.
rootMon, 2011-04-11 11:03
Есть и такой баг. Как руки дойдут - исправлю всё скопом.
zash (not verified)Wed, 2011-04-13 10:42
чтобы wget не висел нужно добавить эти строки: trap exit_prog INT exit_prog(){ kill $SONG_DW_PID kill $SONG_PLY_PID exit }
rootWed, 2011-04-13 22:35
Спасибочки, попробую.
Anonymous (not verified)Sun, 2011-04-17 20:45
посмотрите http://bansoft.ru/index.php/programming/delphi/programs/16--101ru
rootMon, 2011-04-18 23:34
Спасибо, но скрипт задумывался как тренировка способностей в bash-е.
Anonymous (not verified)Thu, 2011-11-17 01:00
$ bash 101ply.sh 101ply.sh: line 22: lynx: command not found Please choose radio station mv: cannot stat `/tmp/101ply-9c78ee1a9cedae72e9fc62cabb8366aa': No such file or directory cat: /tmp/101ply-9c78ee1a9cedae72e9fc62cabb8366aa.tmp: No such file or directory unlink: cannot unlink `/tmp/101ply-9c78ee1a9cedae72e9fc62cabb8366aa.tmp': No such file or directory q ) Quit Your choice? :
rootMon, 2011-11-21 11:55
И что тут сложного? Установите lynx и вперёд. Не знаете как, - напишите сюда вывод команды uname -a и я скажу как именно его установить.

Новый комментарий

Содержимое этого поля не будет отображаться публично.
Image CAPTCHA
Привет всем роботам!

Работает на

Работает на Друпале, системе с открытым кодом Валидный XHTML Валидный CSS
Блогнот 2010. Войков Константин