#!/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="$1" --track="$2" --album="$3" --duration="$4" } 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 old_artist= old_title= old_album= old_duration= 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 | cut -d '"' -f 2` album=`echo "$metadata" | grep -A1 "\" | tail -n1 | cut -d '"' -f 2` 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