#python #api #spotify
#python #API #spotify
Вопрос:
Я пытаюсь написать небольшую программу, которая добавит случайную песню в мою очередь Spotify
это мой код;
import json
import requests
from datetime import date
from refresh import Refresh
import random
import requests
import string
import urllib
class AddSongs(object):
def __init__(self):
self.spotify_token = ""
self.uri = ""
def get_random_tracks(self):
wildcard = f'%{random.choice(string.ascii_lowercase)}%'
query = urllib.parse.quote(wildcard)
offset = random.randint(0, 2000)
url = f"https://api.spotify.com/v1/search?q={query}amp;offset={offset}amp;type=trackamp;limit=1"
response = requests.get(
url,
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {self.spotify_token}"
}
)
response_json = response.json()
print(response)
tracks = [
track for track in response_json['tracks']['items']
]
self.uri = response_json["tracks"]["items"][0]["uri"]
print(f'Found {len(tracks)} tracks to add to your queue')
return tracks
return self.uri
def add_tracks_to_queue(self,):
print('adding to queue...')
url =f"https://api.spotify.com/v1/me/player/queue?uri={self.uri}"
response = requests.post(
url,
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {self.api_token}"
}
)
print(f"Added {track['name']} to your queue")
def callrefresh(self):
print("Refreshing token")
refreshCaller = Refresh()
self.spotify_token = refreshCaller.refresh()
self.get_random_tracks()
return response.ok
a = AddSongs()
a. callrefresh()
этот код дает мне следующую обратную трассировку.
Traceback (most recent call last):
File "/Users/shakabediako/Documents/free_streams/main.py", line 74, in <module>
a. callrefresh()
AttributeError: 'AddSongs' object has no attribute 'callrefresh'
>>>
Я пытался исправить это без какого-либо успеха. Я мало разбираюсь в классах python и атрибутах классов, поэтому я был бы очень признателен за помощь
заранее спасибо 🙂
Ответ №1:
Это проблема с отступом.
Вы хотите определить свои функции callrefresh и add_tracks_to_queue в рамках класса, но вместо этого вы определяете их в рамках вашей функции get_random_tracks .
Python использует отступ для определения области видимости объекта, поэтому, поскольку функции, указанные выше, имеют отступ в get_random_tracks , они интерпретируются в контексте этой функции, поэтому они не добавляются в методы классов и, следовательно, не могут быть вызваны.
Удаление callrefresh и add_tracks_to_queue на один уровень должно решить проблему