Здравствуйте, Хабраменш! ИчБина.
Все началось с поддержки ласт фм радио было так неуклюже реализовано в MPD что я даже перестал компилировать эту функцию.
Неуклюжесть заключалась в том, что после настройки на канал всё равно приходилось вручную добавлять треки в плейлист, ведь сервер выдаёт по пять треков за запрос.
Поэтому после того, как все треки были проиграны, вам необходимо повторить запрос и получить следующие 5 треков! Далее мы поговорим о скриптах, которые автоматизируют этот процесс.
Bash.fm - работа над кораблями
Оригинальная идея найдена.здесь .
Скрипты по ссылке давно устарели и не работали.
Кроме того, автор скриптов имеет очень уникальный стиль и сумел добавить ненужные зависимости, например, от lynx. Поэтому большую часть пришлось изменить, хотя логика работы осталась прежней:
- Инициализируйте сеанс с помощью fmstart
- Настраиваемся на канал с помощью fmpersonal, fmart,.
- Добавляем треки из канала в плейлист с помощью fmget (5 треков на один вызов)
- ВЫГОДА!
Для корректной работы скрипта необходимо сначала создать файл ~/.root@Buffalo:~# cat /mnt/sd/bin/fmstart #!/bin/sh username=$(sed -nr 's/^username=(.
*)/\1/p' ~/.
bashfm) password=$(sed -nr 's/^password=([^[:space:]]*).
*/\1/p' ~/.
bashfm) mediaplayer=$(sed -nr 's/^mediaplayer=(.
*)/\1/p' ~/.
bashfm) if [ ! -z "$password" ]; then passwordmd5=$(echo -n $password | md5sum | sed -nr 's/([^[:space:]]*).
*/\1/p') else passwordmd5=$(sed -nr 's/^passwordmd5=([^[:space:]]*).
*/\1/p' ~/.
bashfm) fi echo 'username='$username > ~/.
bashfm echo 'password=' >> ~/.
bashfm echo 'mediaplayer='"$mediaplayer" >> ~/.
bashfm echo 'passwordmd5='$passwordmd5 >> ~/.
bashfm login_url=' http://ws.audioscrobbler.com/radio/handshake.php ?' login_url="$login_url"'version=1.1.1&platform=linux&username=' login_url="$login_url"$username'&passwordmd5='$passwordmd5 login_url="$login_url"'&debug=0&partner=' echo "login_url=$login_url" >> ~/.
bashfm wget -q -O - "$login_url" >> ~/.
bashfm echo >> ~/.
bashfm
bashfm следующего содержания: root@Buffalo:~# cat ~/.
bashfm
username=ichbins
password=123456
mediaplayer=/mnt/sd/bin/mpc add
здесь имя пользователя и пароль — ваше имя и пароль c ласт фм , а mediaplayer — это команда, добавляющая треки в список воспроизведения.
Когда вы запускаете fmstart в первый раз, пароль будет удален и заменен суммой md5. Небольшое отступление: MPC — это стандартный клиент MPD командной строки.
Но я его не компилирую, а использую однострочный скрипт: root@Buffalo:~# cat /mnt/sd/bin/mpc
#!/bin/sh
echo "$*" | nc localhost 6600
Этот скрипт не является полным аналогом MPC, но для моих нужд его всегда хватало.
Теперь о скриптах выбора каналов.
По сути они все одинаковые, отличается только URL канала внутри.
Я слушаю либо личное радио, либо радио конкретного исполнителя - поэтому ниже приведу только эти два сценария.
Скрипт активации личного радиоканала: root@Buffalo:~# cat /mnt/sd/bin/fmpersonal
#!/bin/sh
#
# "fmpersonal" plays user's personal radio station
#
session=$(sed -nr 's/^session=(.
*)/\1/p' ~/.
bashfm) username=$(sed -nr 's/^username=(.
*)/\1/p' ~/.
bashfm)
tuning_url=' http://ws.audioscrobbler.com/radio/adjust.php ?'
tuning_url="${tuning_url}session=${session}&url= lastfm://user/ "
tuning_url="${tuning_url}${username}/personal"
#echo "$tuning_url"
wget -q -O - "$tuning_url"
echo
В случае успешного выполнения скрипт отобразит: root@Buffalo:~# /mnt/sd/bin/fmpersonal
response=OK
url= http://www.last.fm/listen/user/IchBins/personal
stationname=IchBins’s Library Radio
Скрипт активации канала исполнителя выглядит аналогично: root@Buffalo:~# cat /mnt/sd/bin/fmart
#!/bin/sh
# "fmart" plays the radio station corresponding to a
# certain artist. It takes the artist's name as command
# line argument. Use quotes when the artist's name
# contains spaces.
#
# Example:
# fmart 'jahcoozi'
artist=$(echo $1 | sed 's/ /%20/g')
session=$(sed -nr 's/^session=(.
*)/\1/p' ~/.
bashfm)
tuning_url=' http://ws.audioscrobbler.com/radio/adjust.php ?'
tuning_url="${tuning_url}session=${session}&url= lastfm://artist/ "
tuning_url="${tuning_url}${artist}/similarartists&debug=0"
#echo "$tuning_url"
wget -q -O - "$tuning_url"
echo
Результат выполнения: root@Buffalo:~# /mnt/sd/bin/fmart
response=FAILED
error=4
root@Buffalo:~# /mnt/sd/bin/fmart "Knorkator"
response=OK
url= http://www.last.fm/listen/artist/Knorkator/similarartists
stationname=Knorkator Radio
После того как вы настроитесь на канал, вы сможете добавить треки из него в свой плейлист с помощью fmget: root@Buffalo:~# cat /mnt/sd/bin/fmget
#!/bin/sh
# "fmget" gets list of mp3's from a radiostation and
# adds it into the current playlist
#
# Example:
# fmart 'Depeche Mode'; fmget
session=$(sed -nr 's/^session=(.
*)/\1/p' ~/.
bashfm) mplayer=$(sed -nr 's/^mediaplayer=(.
*)/\1/p' ~/.
bashfm) tuning_url=' http://ws.audioscrobbler.com/radio/xspf.php ?' tuning_url="${tuning_url}sk=${session}" tuning_url="${tuning_url}&discovery=0&desktop=1.5.1" #echo "$tuning_url" mp3list=$(wget -q -O - "$tuning_url" | sed -nr "s/.
*<location>(.
*)<\/location>/\1/p")
for i in $mp3list; do
#echo $i
$mplayer "$i"
done
Результат: root@Buffalo:~# /mnt/sd/bin/fmget
OK MPD 0.16.0
OK
OK MPD 0.16.0
OK
OK MPD 0.16.0
OK
OK MPD 0.16.0
OK
OK MPD 0.16.0
OK
Полученные ссылки на треки являются ссылками на mp3-файлы, поэтому их можно передать на любой проигрыватель, а не только на MPD. Достаточно заменить параметр mediaplayer в файле ~/.
bashfm Это, собственно, все, что я хотел вам сказать.
Что касается автоматизации процесса добавления треков в плейлист, то этот скрипт я оставлю вам в качестве домашнего задания.
Здесь вы можете вызвать fmget +100500 раз или вызвать «mpc status» в цикле, проанализировать ответ и, если nextsong==playlistlength, затем вызвать fmget. В качестве бонуса, если вы дошли до этого места, я подарю вам, мой любопытный друг, все скрипты из статьи.
в одной бутылке Теги: #стриминг #настройка Linux #bash #mp3 #музыка #LastFM #mpd
-
Забавный Однострочный Калькулятор В Sed
19 Oct, 24 -
Модальности В Ит И За Его Пределами
19 Oct, 24 -
Инвайты, Оффтопы, Избранные Теги И Т.д....
19 Oct, 24 -
Google Открыл Android Market
19 Oct, 24 -
Краткий Обзор Электронной Книги Orsio B721
19 Oct, 24