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

如何使用pylast调用Last.fm API获取热门曲目?

解决方法

1. 正确使用pylast获取Last.fm Top100曲目

pylast中对应Last.fm chart.getTopTracks API的方法是get_top_tracks(),而非你尝试的chart_get_top_tracks()。正确实现代码如下:

import pylast

API_KEY = "你的API密钥"
API_SECRET = "你的API密钥"

# 初始化Last.fm网络对象
network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET)

# 获取Top100热门曲目,limit参数指定返回数量
top_tracks = network.get_top_tracks(limit=100)

# 遍历曲目,提取名称和艺术家信息
for track in top_tracks:
    track_name = track.item.name
    artist_name = track.item.artist.name
    print(f"{artist_name} - {track_name}")

返回的top_tracks是包含TopItem对象的列表,每个TopItem的item属性为Track对象,可直接获取曲目名和艺术家信息。

2. 将Last.fm曲目转换为Spotify URI

要添加到Spotify播放列表,需先通过Spotify API搜索对应曲目并获取URI。假设你已用spotipy初始化Spotify客户端,可添加如下逻辑:

import spotipy
from spotipy.oauth2 import SpotifyOAuth

# 初始化Spotify客户端(需确保权限包含播放列表修改)
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id="你的Spotify客户端ID",
    client_secret="你的Spotify客户端密钥",
    redirect_uri="你的重定向URI",
    scope="playlist-modify-public playlist-modify-private"
))

def get_spotify_uri(track_name, artist_name):
    # 优先精确匹配艺术家+曲目名
    results = sp.search(q=f"track:{track_name} artist:{artist_name}", type="track", limit=1)
    if results["tracks"]["items"]:
        return results["tracks"]["items"][0]["uri"]
    # 精确匹配失败时,尝试仅搜索曲目名
    results = sp.search(q=f"track:{track_name}", type="track", limit=1)
    if results["tracks"]["items"]:
        return results["tracks"]["items"][0]["uri"]
    return None

# 收集所有有效Spotify URI
spotify_uris = []
for track in top_tracks:
    uri = get_spotify_uri(track.item.name, track.item.artist.name)
    if uri:
        spotify_uris.append(uri)

3. 更新Spotify播放列表

结合你已实现的playlist_add_items()方法(或直接使用Spotipy的playlist_replace_items避免重复曲目)更新播放列表:

PLAYLIST_ID = "你的Spotify播放列表ID"

# 清空旧曲目(可选,确保播放列表仅保留最新Top100)
sp.playlist_replace_items(PLAYLIST_ID, [])
# 添加新曲目(Spotify API单次最多支持100个项目,刚好匹配需求)
if spotify_uris:
    sp.playlist_add_items(PLAYLIST_ID, spotify_uris)

4. 实现每10分钟自动更新

使用schedule库实现定时任务,保持播放列表实时更新:

import schedule
import time

def update_playlist():
    # 整合完整流程:获取Top100 -> 转换URI -> 更新播放列表
    top_tracks = network.get_top_tracks(limit=100)
    spotify_uris = []
    for track in top_tracks:
        uri = get_spotify_uri(track.item.name, track.item.artist.name)
        if uri:
            spotify_uris.append(uri)
    if spotify_uris:
        sp.playlist_replace_items(PLAYLIST_ID, spotify_uris)
    print("播放列表已完成更新")

# 设置每10分钟执行一次更新任务
schedule.every(10).minutes.do(update_playlist)

# 启动定时任务循环
while True:
    schedule.run_pending()
    time.sleep(1)

注意事项

  • 确保Last.fm和Spotify的API密钥、权限配置正确,避免因权限不足报错。
  • 部分Last.fm曲目可能未在Spotify收录,可根据需求调整搜索策略或跳过无效条目。
  • 若需后台运行脚本,可使用Linux的nohup或Windows的任务计划程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:40:31