【问题标题】:getting 404 when trying to add songs to using spotify api尝试将歌曲添加到使用 spotify api 时收到 404
【发布时间】:2020-09-21 15:56:51
【问题描述】:

我正在制作一个项目,它将从您的 youtube 播放列表中添加歌曲以识别播放列表。除了add_item() 方法外,一切正常。我收到来自 requests 对象的 404 : not found 响应。

是的,我检查了这首歌是否真的存在。它确实存在,甚至打印了歌曲的id。所以它存在。

I'm following the official documentation

这是我的代码 -

import json
from requests_oauthlib import OAuth2Session
import requests
import base64
import  urllib.parse as urlparse
from urllib.parse import parse_qs



client_id = #id
client_secret = #secret
redirect_uri = 'https://www.spotify.com'
scope = "playlist-modify-public user-read-email user-read-private playlist-modify-private"
req = f'{client_id}:{client_secret}'
encoded = base64.b64encode(req.encode())

class sp :
    def __init__(self) :
        self.get_token()
        self.get_id()
        self.uri_list = []


    def get_token(self) :
        url = 'https://accounts.spotify.com/authorize'
        oauth = OAuth2Session(client_id, redirect_uri = redirect_uri, scope = scope)
        authorization_url, state = oauth.authorization_url(url)
        print(authorization_url)
        authorization_response = input('paste here : ')

        parsed = urlparse.urlparse(authorization_response)
        authorization_code = parse_qs(parsed.query)['code'][0]

        # to get auth token
        headers = {
            'Authorization' : f'Basic {encoded.decode()}'
        }
        data = {
            'grant_type' : 'authorization_code',
            'redirect_uri' : redirect_uri,
            'code' : authorization_code
        }

        access = requests.post('https://accounts.spotify.com/api/token', data = data, headers = headers)
        response = json.loads(access.text)
        self.access_token = response['access_token']

    def get_id(self) :
        headers = {
            'Authorization' : f'Bearer {self.access_token}'
        }
        user_info = requests.get('https://api.spotify.com/v1/me', headers = headers)
        user_info.raise_for_status()
 

        user_info = json.loads(user_info.text)
        self.user_id  = user_info['id']

    def search(self) :
        
        search_url = 'https://api.spotify.com/v1/search'

        headers = {
            'Authorization': f'Bearer {self.access_token}'
        }
        params = {
            'q' : 'track:Memories artist:Maroon 5', 
            'type' : 'track',
            'limit' : 1,

        }

        search_response = requests.get(search_url, headers = headers, params = params)
        search_response.raise_for_status()
        
        json_response = search_response.json()
        song_uri =  json_response['tracks']['items'][0]['uri']
        self.uri_list.append(song_uri)
        
    def create_playlist(self) :
        create_playlist_url = f'https://api.spotify.com/v1/users/{self.user_id}/playlists'

        headers = {
            'Authorization' : f'Bearer {self.access_token}',
            'Content-Type' : 'application/json'
        }

        data = json.dumps({
            'name' : 'new playlist'
        })
        response = requests.post(create_playlist_url, headers = headers, data = data)
        print(response)
        self.playlist_id = response.json()['uri']

    def add_items(self) :
        add_items_url = f'https://api.spotify.com/v1/playlists/{self.playlist_id}/tracks'

        headers = {
            'Authorization' : f'Bearer {self.access_token}',
            'Content-Type' : 'application/json'
        }
        print(self.uri_list)
        data = {
            'uris' : json.dumps(self.uri_list)
        }

        res = requests.post(add_items_url, headers = headers, data = data)
        print(res)





user = sp()

user.create_playlist()
user.search()
user.add_items()

感谢任何帮助。谢谢

【问题讨论】:

    标签: python api python-requests spotify


    【解决方案1】:

    你有这行代码来创建播放列表:

    self.playlist_id = response.json()['uri']
    

    然后在您拥有的项目添加逻辑中:

    add_items_url = f'https://api.spotify.com/v1/playlists/{self.playlist_id}/tracks'
    

    您确定要使用播放列表 uri 作为播放列表 ID 吗?

    您能否用更多信息更新您的问题:

    1. response.json() 播放列表创建后的值
    2. 在声明 f-string 后打印 add_items_url

    更新

    https://developer.spotify.com/documentation/web-api/reference/playlists/create-playlist/ 我可以在这里看到 - 创建播放列表后的响应包括 id 字段

    所以你应该改变这一行

    self.playlist_id = response.json()['uri']
    

    self.playlist_id = response.json()['id']
    

    【讨论】:

    • 嘿,谢谢你的回复。我将uri 更改为id(粗心的错误ik :))。但我仍然收到400 作为错误,代表语法错误
    • add_items 一步?
    • 是的,但无论如何我发现了我应该将整个数据字典转换为 json 字符串的语法错误。非常感谢您的帮助:)
    • 耶! Lmk 如果您需要有关该 spotify 代码的更多帮助。 :)
    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 2012-12-20
    • 2017-12-31
    • 2013-11-17
    • 2010-12-07
    • 2016-05-04
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多