I am relatively new to programming, and I have a small problem writing a python equivalent of Snip for spotify for ubuntu(linux)
Somehow i can encode the title correctly, but am unable to encode the artist the same way
when i try to encode the artist in the same fashion i get this:
File "./songfinder.py", line 11, in currentplaying
artiststr = str((metadata['xesam:artist']).encode('utf-8'))
AttributeError: 'dbus.Array' object has no attribute 'encode'
session_bus = dbus.SessionBus()
spotify_bus = session_bus.get_object("org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2")
spotify_properties = dbus.Interface(spotify_bus, "org.freedesktop.DBus.Properties")
metadata = spotify_properties.Get("org.mpris.MediaPlayer2.Player", "Metadata")
title = str((metadata['xesam:title']).encode('utf-8'))
artiststr = str((metadata['xesam:artist']))
if ("dbus.string" in artiststr.lower()):
artists = artiststr.split("(u")
artist = artists
artists = artist.split(")],")
artist = artists
artist = artist.replace("(u", "")
artist = "'unknown'"
artist = (artist.replace("'",""))
playing = (artist + " - " + title + " ")
#save playing to file.txt
The error you getting is not about unicode, it is about wrong type. Python complains that you trying to call string method
encode from the array object. Which does not have this method.
The first this I would try is to remove redundant brackets here it getting artiststr like this:
artiststr = str(metadata['xesam:artist']).
But I'm not sure this would work. If it doesn't work, you need to find out what type has metadata['xesam:artist']. Looks like it is not string, but array. So you need to fix the code which fills
metadata['xesam:artist'] with data. You can try to use debugger or just
print() function to find out the content of
metadata['xesam:artist']. Or provide the relevant code in you question too.