Source code for i3pystatus.lastfm

from urllib.request import urlopen
import json
from i3pystatus import IntervalModule


[docs]class LastFM(IntervalModule): """ Displays currently playing song as reported by last.fm. Get your API key from http://www.last.fm/api. """ settings = ( ("apikey", "API key used to make calls to last.fm."), ("user", "Name of last.fm user to track."), ("playing_format", "Output format when a song is playing"), ("stopped_format", "Output format when nothing is playing"), "playing_color", "stopped_color", "interval", ) required = ("apikey", "user") playing_color = 'FFFFFF' stopped_color = '000000' interval = 5 playing_format = "{artist} - {track}" stopped_format = "" def run(self): apiurl = 'http://ws.audioscrobbler.com/2.0/' uri = '?method=user.getrecenttracks'\ '&user=%s&api_key=%s' \ '&format=json&'\ 'limit=1' % (self.user, self.apikey) content = urlopen(apiurl + uri).read() responsestr = content.decode('utf-8') response = json.loads(responsestr) try: track = response['recenttracks']['track'][0] if track['@attr']['nowplaying'] == 'true': cdict = { "artist": track['artist']['#text'], "track": track['name'], "album": track['album']['#text'], } self.data = cdict self.output = { "full_text": self.playing_format.format(**cdict), "color": self.playing_color } except KeyError: self.output = { "full_text": self.stopped_format, "color": self.stopped_color }