You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spotipy库上传Spotify播放列表图片时遇413及401错误求助

解决Spotipy上传播放列表封面时的413/401错误

问题核心说明

  • 413错误是因为Base64编码后的图片数据体积超出Spotify API限制,点击错误链接返回的401属于正常现象——该链接未携带授权Token,和实际上传问题无关。
  • 你的代码还存在Base64编码格式的小问题,同时需满足Spotify对封面图片的硬性要求。

修复方案

1. 先明确Spotify封面的硬性规则

  • 格式必须是JPEG/PNG
  • 最小尺寸640×640像素
  • Base64编码后的数据不能超过256KB(原文件需控制在192KB以内,因为Base64会让体积增加约33%)

2. 修正Base64编码格式

base64.b64encode()返回的是bytes对象,而Spotipy的playlist_upload_cover_image方法要求传入UTF-8编码的字符串,需要添加解码步骤:

image_64_encode = base64.b64encode(image_read).decode('utf-8')

3. 压缩图片到符合大小限制

可以用Python的PIL库自动压缩图片,确保体积达标:

from PIL import Image
import os

def compress_image(input_path, output_path, target_size_kb=190):
    img = Image.open(input_path)
    # 确保图片不低于最小尺寸
    if img.width < 640 or img.height < 640:
        img = img.resize((640, 640), Image.Resampling.LANCZOS)
    # 逐步降低质量直到符合大小要求
    quality = 90
    while True:
        img.save(output_path, 'JPEG', quality=quality)
        file_size = os.path.getsize(output_path)
        if file_size <= target_size_kb * 1024 or quality <= 10:
            break
        quality -= 5

4. 完整修复后的代码

import spotipy
from spotipy.oauth2 import SpotifyOAuth
import base64
import os
from PIL import Image

playlist_id = "P1a6gzPL0Xg51or8rfirrsr19f6Pi1e4cfzX101fcf"

def compress_image(input_path, output_path, target_size_kb=190):
    img = Image.open(input_path)
    if img.width < 640 or img.height < 640:
        img = img.resize((640, 640), Image.Resampling.LANCZOS)
    quality = 90
    while True:
        img.save(output_path, 'JPEG', quality=quality)
        file_size = os.path.getsize(output_path)
        if file_size <= target_size_kb * 1024 or quality <= 10:
            break
        quality -= 5
    print(f"压缩后图片大小: {file_size/1024:.2f}KB")

def change_playlist_cover_image():
    cv = spotipy.Spotify(auth_manager=SpotifyOAuth(
        client_id="7122ce01c646449565965a18c4597779",
        client_secret="7f8bcfd7b7e5310bbcc5706b634f4c37",
        redirect_uri="http://127.0.0.1:9090",
        scope="ugc-image-upload playlist-modify-public playlist-modify-private"
    ))

    # 先压缩图片
    compress_image('lilmini.jpg', 'compressed_cover.jpg')

    # 读取并编码图片
    with open('compressed_cover.jpg', 'rb') as image:
        image_read = image.read()
        image_64_encode = base64.b64encode(image_read).decode('utf-8')
    
    cv.playlist_upload_cover_image(playlist_id, image_64_encode)
    print("封面上传成功")

change_playlist_cover_image()

额外注意点

  • 授权Scope要加上playlist-modify-public或playlist-modify-private(根据你的播放列表权限),避免权限不足错误
  • 测试时可以先用一张明确符合要求的小图(比如640×640、100KB以内的JPEG)验证代码逻辑

内容的提问来源于stack exchange,提问作者iamnotacoder33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:55:31