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

如何通过Spotify Web API获取歌曲的总播放量?

问题描述

我尝试从Spotify的TOP 50播放列表中获取歌曲的全局总播放量,流程是先获取歌曲ID,再发起二次请求,但返回的数值只是我个人账号的播放量。请问如何获取全局总播放量?这是否可行?

useEffect(() => {
    if (!accessToken) return alert("Failed OAUTH");
    axios.get('https://api.spotify.com/v1/playlists/37i9dQZEVXbMDoHDwVN2tF/tracks?fields=items(track(name%2C%20id)%2C%20track(album(images)%2C%20artists))', {
        headers: {
            'Authorization': `Bearer ${accessToken}`
        }
    }).then(response => {
        const firstTrackId = response.data.items[0].track.id;
        setnameTopArtist(response.data.items[0].track.artists[0].name)
        axios.get(`https://api.spotify.com/v1/tracks/${firstTrackId}`, {
            headers: {
                'Authorization': `Bearer ${accessToken}`
            }
        }).then(res => {
            const firstTrackStreams = res.data.popularity;
            console.log("ress:" + res);
            console.log(`Počet poslechů první skladby: ${firstTrackStreams}`);
            setmonthlyListeners(firstTrackStreams);
        }).catch(error => {
            console.error(error);
        });
    }).catch(error => {
        console.error(error);
    });
}, [accessToken]);


return (
    <div className="  max-w-5xl bg-primary ml-4 mr-4 mb-4 mt-4 rounded-lg md:ml-8 md:mr-8 md:mb-8 md:mt-8">
        {/*Left side*/}
        <div className= "mt-4 md:mt-8 gap-2 flex flex-col justify-left items-left" >

            {/* Verification icon*/}
            <div className=" ml-4  gap-1 flex flex-row justify-left items-center ">
                <MdVerified className="w-6 h-6 md:w-12 h-12" />
                <h2 className = "text-sm md:text-base ">Verified artist</h2>
            </div>

            {/*Artist name*/}

            <h2 className= "ml-4 md:ml-6 text-lg md:text-3xl font-bold">{nameTopArtist}</h2>

            {/*Monthly listeners*/}
            <h3 className= "text-sm md:text-base text-gray-300 ml-4 md:ml-6 ">{monthlyListeners} monthly listeners</h3>

        </div>


        {/*Right side with image*/ }
    </div>
);
}
解答

先纠正一个误解

你当前获取的res.data.popularity不是个人播放量,它是Spotify基于全球播放数据计算的歌曲流行度指标(取值0-100)。数值越高,代表该歌曲近期在全球范围内的播放量越多、热度越高。你误以为是个人数据,可能是测试时的巧合,但这个字段本身就是全局热度的体现。

关于获取精确全局总播放量的可行性

Spotify官方公开API不提供单首歌曲的精确全局总播放次数。这类数据属于商业敏感信息,仅对歌曲的艺术家本人或其授权团队开放,可通过Spotify for Artists平台查看,第三方开发者无法通过公开接口获取。

可用的替代方案

如果需要展示歌曲的热度相关数据,建议继续使用popularity字段,它已经能直观反映歌曲的全球流行程度。

如果你的需求是展示艺人相关数据(比如代码里的monthlyListeners),注意:公开API中无法获取艺人的月度听众数,但可以获取艺人的总粉丝数,通过调用/artists/{artist_id}接口的followers.total字段实现,示例代码调整如下:

useEffect(() => {
    if (!accessToken) return alert("Failed OAUTH");
    axios.get('https://api.spotify.com/v1/playlists/37i9dQZEVXbMDoHDwVN2tF/tracks?fields=items(track(name%2C%20id)%2C%20track(album(images)%2C%20artists))', {
        headers: {
            'Authorization': `Bearer ${accessToken}`
        }
    }).then(response => {
        const firstTrack = response.data.items[0].track;
        const artistId = firstTrack.artists[0].id;
        setnameTopArtist(firstTrack.artists[0].name);
        
        // 调用艺人信息接口获取总粉丝数
        axios.get(`https://api.spotify.com/v1/artists/${artistId}`, {
            headers: {
                'Authorization': `Bearer ${accessToken}`
            }
        }).then(res => {
            const totalFollowers = res.data.followers.total;
            console.log(`艺人总粉丝数: ${totalFollowers}`);
            setmonthlyListeners(totalFollowers); // 建议修改字段名避免歧义,比如改为totalFollowers
        }).catch(error => {
            console.error(error);
        });
    }).catch(error => {
        console.error(error);
    });
}, [accessToken]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:54