48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import requests
|
|
import random
|
|
from protos.canvas_pb2 import EntityCanvazRequest, EntityCanvazResponse
|
|
|
|
API_HOST = "https://gew1-spclient.spotify.com"
|
|
CANVAS_ROUTE = "/canvaz-cache/v0/canvases"
|
|
TOKEN_ENDPOINT = "https://open.spotify.com/get_access_token?reason=transport"
|
|
TOKEN_RENEW_TIME = 900
|
|
|
|
TRACK_URI_PREFIX = "spotify:track:"
|
|
OAUTH_SCOPES = "playlist-read"
|
|
|
|
|
|
def get_access_token():
|
|
try:
|
|
response = requests.get(TOKEN_ENDPOINT)
|
|
data = response.json()
|
|
return data["accessToken"]
|
|
except Exception as e:
|
|
raise Exception(e)
|
|
|
|
|
|
def get_canvas_for_track(access_token, track_id):
|
|
canvas_request = EntityCanvazRequest()
|
|
canvas_request_entities = canvas_request.entities.add()
|
|
canvas_request_entities.entity_uri = TRACK_URI_PREFIX + track_id
|
|
|
|
try:
|
|
resp = requests.post(
|
|
API_HOST + CANVAS_ROUTE,
|
|
headers={
|
|
"Content-Type": "application/x-protobuf",
|
|
"Authorization": "Bearer %s" % access_token
|
|
},
|
|
data=canvas_request.SerializeToString(),
|
|
)
|
|
except:
|
|
raise ConnectionError
|
|
|
|
canvas_response = EntityCanvazResponse()
|
|
canvas_response.ParseFromString(resp.content)
|
|
|
|
if(len(canvas_response.canvases) == 0):
|
|
raise AttributeError
|
|
|
|
canvas = random.choice(canvas_response.canvases)
|
|
return canvas.url
|