mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
from . import MetadataInterface, utf, b64
|
|
import urllib.parse, urllib.request
|
|
import json
|
|
from threading import Timer
|
|
from doreah.logging import log
|
|
|
|
class Spotify(MetadataInterface):
|
|
name = "Spotify"
|
|
identifier = "spotify"
|
|
|
|
settings = {
|
|
"apiid":"SPOTIFY_API_ID",
|
|
"secret":"SPOTIFY_API_SECRET"
|
|
}
|
|
|
|
metadata = {
|
|
"trackurl": "https://api.spotify.com/v1/search?q=artist:{artist}%20track:{title}&type=track&access_token={token}",
|
|
"artisturl": "https://api.spotify.com/v1/search?q=artist:{artist}&type=artist&access_token={token}",
|
|
"response_type":"json",
|
|
"response_parse_tree_track": ["tracks","items",0,"album","images",0,"url"],
|
|
"response_parse_tree_artist": ["artists","items",0,"images",0,"url"],
|
|
"required_settings": ["apiid","secret"],
|
|
}
|
|
|
|
def authorize(self):
|
|
|
|
if self.active_metadata():
|
|
|
|
try:
|
|
keys = {
|
|
"url":"https://accounts.spotify.com/api/token",
|
|
"method":"POST",
|
|
"headers":{
|
|
"Authorization":"Basic " + b64(utf(self.settings["apiid"] + ":" + self.settings["secret"])).decode("utf-8")
|
|
},
|
|
"data":bytes(urllib.parse.urlencode({"grant_type":"client_credentials"}),encoding="utf-8")
|
|
}
|
|
req = urllib.request.Request(**keys)
|
|
response = urllib.request.urlopen(req)
|
|
responsedata = json.loads(response.read())
|
|
if "error" in responsedata:
|
|
log("Error authenticating with Spotify: " + responsedata['error_description'])
|
|
expire = 3600
|
|
else:
|
|
expire = responsedata.get("expires_in",3600)
|
|
self.settings["token"] = responsedata["access_token"]
|
|
log("Successfully authenticated with Spotify")
|
|
Timer(expire,self.authorize).start()
|
|
except Exception as e:
|
|
log("Error while authenticating with Spotify: " + repr(e))
|