объект не имеет атрибута python, spotify api

#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 на один уровень должно решить проблему