如何使用Spotipy API检索超过50条记录

huangapple go评论87阅读模式
英文:

How to retrieve more than 50 records using Spotipy API

问题

以下是您要翻译的代码部分:

我正在使用`Spotipy` API 从Spotify检索歌曲数据以下是我的代码

import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id='<my_client_id>',
                                                           client_secret='<my_client_secret>'))

results = sp.search(q="artist:guns n' roses", limit=50)

d = []
for idx, track in enumerate(results['tracks']['items']):
    d.append(
        {
            'Track': track['name'],
            'Album': track['album']['name'],
            'Artist': track['artists'][0]['name'],
            'Release Date': track['album']['release_date'],
            'Track Number': track['track_number'],
            'Popularity': track['popularity'],
            'Track Number': track['track_number'],
            'Explicit': track['explicit'],
            'Duration': track['duration_ms'],
            'Audio Preview URL': track['preview_url'],
            'Album URL': track['album']['external_urls']['spotify']
        }
    )

pd.DataFrame(d)

根据文档似乎Spotify对每个搜索的限制是50条记录

是否有可能检索给定字符串搜索的***所有记录***例如通过分块请求等方式)?

谢谢
英文:

I'm using the Spotipy API to retrieve song data from Spotify. Here's my code:

import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id=&#39;&lt;my_client_id&gt;&#39;,
                                                           client_secret=&#39;&lt;my_client_secret&#39;))

results = sp.search(q=&quot;artist:guns n&#39; roses&quot;, limit=50)

d = []
for idx, track in enumerate(results[&#39;tracks&#39;][&#39;items&#39;]):
    d.append (
        {
            &#39;Track&#39; : track[&#39;name&#39;],
            &#39;Album&#39; : track[&#39;album&#39;][&#39;name&#39;],
            &#39;Artist&#39; : track[&#39;artists&#39;][0][&#39;name&#39;],
            &#39;Release Date&#39; : track[&#39;album&#39;][&#39;release_date&#39;],            
            &#39;Track Number&#39; : track[&#39;track_number&#39;],
            &#39;Popularity&#39; : track[&#39;popularity&#39;],
            &#39;Track Number&#39; : track[&#39;track_number&#39;],
            &#39;Explicit&#39; : track[&#39;explicit&#39;],
            &#39;Duration&#39; : track[&#39;duration_ms&#39;],
            &#39;Audio Preview URL&#39; : track[&#39;preview_url&#39;],
            &#39;Album URL&#39; : track[&#39;album&#39;][&#39;external_urls&#39;][&#39;spotify&#39;]
        }
    )

pd.DataFrame(d)

Per the docs, it appears that Spotify has a limit of 50 records.

Is it possible to retrieve all records for a given string search? (e.g. by chunking requests, etc.)

Thanks!

答案1

得分: 1

以下是代码的翻译部分:

# 导入必要的库
import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

# 创建 Spotify 客户端
sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id='<你的客户端ID>', client_secret='<你的客户端密钥>'))

# 初始化一个空列表
d = []

# 临时变量
total = 1
offset = 0

# 循环获取数据,每次最多获取 50 条
while offset < total:
    results = sp.search(q="artist:guns n' roses", type='track', offset=offset, limit=50)
    total = results['tracks']['total']
    offset += 50  # 增加偏移量
    for idx, track in enumerate(results['tracks']['items']):
        d.append(
            {
                'Track': track['name'],
                'Album': track['album']['name'],
                'Artist': track['artists'][0]['name'],
                'Release Date': track['album']['release_date'],
                'Track Number': track['track_number'],
                'Popularity': track['popularity'],
                'Track Number': track['track_number'],
                'Explicit': track['explicit'],
                'Duration': track['duration_ms'],
                'Audio Preview URL': track['preview_url'],
                'Album URL': track['album']['external_urls']['spotify']
            }
        )

# 创建数据框
df = pd.DataFrame(d)

请注意,你需要将 <你的客户端ID><你的客户端密钥> 替换为你自己的 Spotify 开发者凭据。

英文:

The Spotify Web API can return a maximum of 1000 items. (In this example, it found 390 tracks, so it got all of them.)
Here is the code to get them:

import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id=&#39;&lt;my_client_id&gt;&#39;,
                                                           client_secret=&#39;&lt;my_client_secret&gt;&#39;))

d = []

total = 1 # temporary variable
offset = 0

while offset &lt; total:
    results = sp.search(q=&quot;artist:guns n&#39; roses&quot;,  type=&#39;track&#39;, offset=offset, limit=50)
    total = results[&#39;tracks&#39;][&#39;total&#39;]
    offset += 50 # increase the offset
    for idx, track in enumerate(results[&#39;tracks&#39;][&#39;items&#39;]):
        d.append (
            {
                &#39;Track&#39; : track[&#39;name&#39;],
                &#39;Album&#39; : track[&#39;album&#39;][&#39;name&#39;],
                &#39;Artist&#39; : track[&#39;artists&#39;][0][&#39;name&#39;],
                &#39;Release Date&#39; : track[&#39;album&#39;][&#39;release_date&#39;],            
                &#39;Track Number&#39; : track[&#39;track_number&#39;],
                &#39;Popularity&#39; : track[&#39;popularity&#39;],
                &#39;Track Number&#39; : track[&#39;track_number&#39;],
                &#39;Explicit&#39; : track[&#39;explicit&#39;],
                &#39;Duration&#39; : track[&#39;duration_ms&#39;],
                &#39;Audio Preview URL&#39; : track[&#39;preview_url&#39;],
                &#39;Album URL&#39; : track[&#39;album&#39;][&#39;external_urls&#39;][&#39;spotify&#39;]
            }
        )

pd.DataFrame(d)

huangapple
  • 本文由 发表于 2023年2月8日 09:21:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/75380532.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定