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

Spotify API返回304状态码后如何获取响应?

Spotify API返回304状态码后如何获取响应?

别慌,先搞清楚304状态码到底是什么意思——它不是“请求失败”,而是HTTP缓存机制的正常响应:Spotify API告诉你,这首歌的音频特征数据没有变化,建议你使用之前缓存的版本。但重点是:服务器其实还是会返回缓存的音频特征数据的,你可能只是误解了304的含义,以为拿不到数据而已。

给你一步步解决问题:

1. 先确认304响应里有没有数据

你可以先修改get_audio_features函数,打印状态码和返回的内容片段,验证数据是否存在:

import requests  # 确保导入requests库,你之前的代码里的get应该是requests.get
import json
import pandas as pd

def get_audio_features(token, track_id):
    url = f"https://api.spotify.com/v1/audio-features/{track_id}"
    headers = {"Authorization": f"Bearer {token}"}
    result = requests.get(url, headers=headers)
    
    # 打印状态码和部分特征信息,验证数据存在
    print(f"Track ID: {track_id} | Status Code: {result.status_code}")
    if result.content:
        json_result = result.json()  # 用requests内置的json解析更便捷
        print(f"已获取特征:{list(json_result.keys())[:5]}...")
    else:
        json_result = {}
        print("⚠️ 无内容返回!")
    
    return json_result

运行后你会发现,即使状态码是304,后面依然会打印出acousticness、danceability这类特征名称——这说明数据已经正常拿到了,只是服务器提示你数据没更新而已。

2. 正常生成并保存DataFrame

既然数据能正常获取,你完全可以沿用原来的逻辑生成DataFrame,然后直接保存为CSV,不用纠结304状态码:

# 前面的授权代码保持不变
df = pd.read_csv('liked_songs.csv')
track_features_list = []

for i, track_id in enumerate(df['track_id']):
    features = get_audio_features(access_token, track_id)
    track_features_list.append(features)

feature_df = pd.DataFrame(track_features_list)
feature_df.to_csv('saved_track_features.csv', index=False)  # 保存结果到CSV
print("✅ 数据已保存到saved_track_features.csv!")
print(feature_df.head())

3. 为什么清除浏览器缓存没用?

你的请求是从Python代码发起的,和浏览器完全无关——这里的缓存要么是requests库在本地维护的缓存,要么是Spotify API服务器端的缓存(毕竟歌曲的音频特征是静态数据,几乎不会变化),所以清浏览器缓存自然起不到作用。

4. (可选)如果想强制绕开缓存(其实没必要)

如果你实在想让服务器返回200状态码而非304,可以给请求加唯一查询参数或更严格的缓存控制头,但这步完全多余,因为304响应已经包含你需要的所有数据:

import time

def get_audio_features(token, track_id):
    # 加时间戳参数让每个请求URL唯一
    url = f"https://api.spotify.com/v1/audio-features/{track_id}?t={int(time.time())}"
    headers = {
        "Authorization": f"Bearer {token}",
        "Cache-Control": "no-cache, no-store, must-revalidate",
        "Pragma": "no-cache",
        "Expires": "0"
    }
    result = requests.get(url, headers=headers)
    return result.json()

备注:内容来源于stack exchange,提问作者Yashaswat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:08:10