http://mpd.wikia.com/wiki/Hack:bashfm
Last fm streaming client for the busybox shell
source: http://www.last.fm/group/LastBASH/forum/43627/_/236797
preparations:
lynx and egrep are needed
alternative solution: http://files.viharpander.dk/bash/mc/mcf
nano /usr/local/root/.bashfm
username=SECRET
password=SECRET
mediaplayer="mpc add"
Here follows the fmstart script:
#!/usr/bin/bash
# "fmstart" starts playing last.fm radio. "fmstart"
# should be used before any other bashfm commands are
# given. It obtains the username, password, and
# mediaplayer from the ".bashfm" file. If the password
# present in the file as plain text, it will be md5
# encoded and the plain text version will be removed.
# It then logs in into Last.fm, obtains the audio
# stream URL, and launches the media player. "fmstart"
# takes no command arguments.
username=`cat ~/.bashfm | grep "^username="`
username=`expr "$username" : 'username=\(.*\)'`
password=`cat ~/.bashfm | grep "^password="`
password=`expr "$password" : 'password=\(.*\)'`
password=`echo -n "$password" | sed -e 's/[ ]*$//'`
mediaplayer=`cat ~/.bashfm | grep "^mediaplayer="`
mediaplayer=`expr "$mediaplayer" : 'mediaplayer=\(.*\)'`
mediaplayer=`echo -n "$mediaplayer" | tr '\' '/'`
if [ ! -z "$password" ]
then
passwordmd5=`echo -n $password | md5sum`
passwordmd5=`expr "$passwordmd5" : '\([0-9A-Fa-f]*\)\.*'`
else
passwordmd5=`cat ~/.bashfm | grep "^passwordmd5="`
passwordmd5=`expr "$passwordmd5" : 'passwordmd5=\(.*\)'`
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=linu x&username='
login_url="$login_url"$username'&passwordmd5='$pas swordmd5
login_url="$login_url"'&debug=0&partner='
echo "login_url=$login_url" >> ~/.bashfm
lynx -source "$login_url" >> ~/.bashfm
echo >> ~/.bashfm
stream_url=`cat ~/.bashfm | grep "^stream_url="`
stream_url=`expr "$stream_url" : 'stream_url=\(.*\)'`
"$mediaplayer" "$stream_url" &
Here follows the "fmtag" script
#!/usr/bin/bash
# "fmtag" plays the music corresponding to the tag given
# as command argument. The tag needs to be quoted when
# it contains spaces.
#
# Example:
# fmtag 'netlabel'
tag=`echo $1 | sed 's/ /%20/g'`
session=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
tuning_url='http://ws.audioscrobbler.com/radio/adjust.php?'
tuning_url="$tuning_url"'session='$session'&url=la stfm://'
tuning_url="$tuning_url"'globaltags/'$tag'&debug=0'
lynx -source "$tuning_url" > /dev/null
Here follows the "fmart" script.
#!/usr/bin/bash
# "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=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
tuning_url='http://ws.audioscrobbler.com/radio/adjust.php?'
tuning_url="$tuning_url"'session='$session'&url=la stfm://artist/'
tuning_url="$tuning_url"$artist'/similarartists&debug=0'
lynx -source "$tuning_url" > /dev/null
Here follows the "fmbor" script.
#!/usr/bin/bash
# "fmbor" plays your neighbourhood radio. "fmbor" takes
# no command line arguments.
username=`cat ~/.bashfm | grep "^username="`
username=`expr "$username" : 'username=\(.*\)'`
session=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
tuning_url='http://ws.audioscrobbler.com/radio/adjust.php?'
tuning_url="$tuning_url"'session='$session'&url=la stfm://user/'
tuning_url="$tuning_url"$username'/neighbours&debug=0'
lynx -source "$tuning_url" > /dev/null
Here follows the "fminfo" script
#!/usr/bin/bash
# "fminfo" returns the name of the artist, name
# of the song and name of the album of the music
# that is currently playing. "fminfo" takes no
# command line arguments.
session=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
info_url='http://ws.audioscrobbler.com/radio/np.php?'
info_url="$info_url"'session='$session'&debug=0'
lynx -source "$info_url" | egrep '(^artist=|^track=|^album=)'
Here follows the "fmskip" script
#!/usr/bin/bash
# "fmskip" skips the song that is currently playing.
# It takes no command line arguments.
session=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
skip_url='http://ws.audioscrobbler.com/radio/control.php?'
skip_url="$skip_url"'session='$session'&command=sk ip&debug=0'
lynx -source "$skip_url"
echo
Here follows the "fmlove" script
#!/usr/bin/bash
# "fmlove" adds the song that is currently playing to
# the list of loved songs. "fmlove" takes no command
# line arguments.
session=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
love_url='http://ws.audioscrobbler.com/radio/control.php?'
love_url="$love_url"'session='$session'&command=lo ve&debug=0'
lynx -source "$love_url"
echo
Here follows the "fmban" script
#!/usr/bin/bash
# "fmban" bans the current song from your radio. "fmban"
# takes no command line arguments.
session=`cat ~/.bashfm | grep "^session="`
session=`expr "$session" : 'session=\(.*\)'`
ban_url='http://ws.audioscrobbler.com/radio/control.php?'
ban_url="$ban_url"'session='$session'&command=ban& debug=0'
lynx -source "$ban_url"
echo