#!/bin/sh # # Get currently played song from Spotify and scrobble with # moc-scrobbler (https://github.com/pachanka/moc-scrobbler) # DBUS_ARGS="--print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player" scrobble() { artist=$1 title=$2 album=$3 duration=$4 moc-scrobbler --artist="$artist" --track="$title" --album="$album" --duration="$duration" } while true do status=`dbus-send $DBUS_ARGS string:PlaybackStatus 2>/dev/null` if [ $? -gt 0 ]; then echo "Spotify is not running." exit fi if [ "`echo "$status" | tail -n1 | cut -d '"' -f 2`" != "Playing" ]; then # currently nothing is playing; keep checking sleep 5 continue fi metadata=`dbus-send $DBUS_ARGS string:Metadata` artist=`echo "$metadata" | grep -A2 "\" | tail -n1 | cut -d '"' -f 2` title=`echo "$metadata" | grep -A1 "\" | tail -n1 | sed 's/.*string \"\(.*\)\"$/\1/g'` album=`echo "$metadata" | grep -A1 "\" | tail -n1 | sed 's/.*string \"\(.*\)\"$/\1/g'` duration=`echo "$metadata" | grep -A1 "\" | tail -n1 | awk '{ print $3 }'` [ -n "$duration" ] && duration=`expr $duration / 1000000` if [ -z "$artist" -o -z "$title" -o -z "$album" -o -z "$duration" ]; then echo "Invalid data, not scrobbling. [$artist] [$title] [$album] [$duration]" sleep 5 continue fi if [ "$old_artist" = "$artist" -a "$old_title" = "$title" ]; then # don't scrobble same song as in last iteration sleep 5 continue fi scrobble "$artist" "$title" "$album" "$duration" old_artist=$artist old_title=$title old_album=$album old_duration=$duration sleep 5 done