使用网址检索YouTube播放列表项时,我得到了一些奇怪的结果。首先,YouTube播放列表最多可以包含200个播放列表项。

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status,contentDetails&maxResults=50&playlistId=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI&key=API_KEY

  • 运行此程序时,我得到正确的结果(返回50个项目,总共200个结果,每页结果50个,nextPageToken:“CDIQAA”)
  • 然后,我总是在最后一个nextPageToken上运行新请求:

  • https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status,contentDetails&maxResults=49&playlistId=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI&key=API_KEY&pageToken=CDEQAA

    100个结果,nextPageToken:“CGQQAA”,
  • https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status,contentDetails&maxResults=49&playlistId=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI&key=API_KEY&pageToken=CGQQAA

  • 到目前为止,有150个结果,nextPageToken:“CDIQAA”

    现在,此nextPageToken始终在第一个nextPageToken处重复其相同的原因,为什么我仍然没有检索全部200个结果?

    最佳答案

    我猜您的代码中存在一些逻辑问题,在第三次请求后,我得到了CJYBEAA token 。
    这里的功能可以很好地与您的播放列表ID配合使用,并返回整个200个视频ID:

    def getPlaylistVideosIDs(playlist_id):
        videos_IDs = []
        search = YOUR_YOUTUBE_KEY.playlistItems().list(part='snippet', playlistId=playlist_id,
                                                  maxResults=50).execute()
    
        try:
            nextPageToken = search['nextPageToken']
        except KeyError:
            nextPageToken = None
    
        for item in search['items']:
            videos_IDs.append(item['snippet']['resourceId']['videoId'])
    
        while (nextPageToken):
            search = YOUR_YOUTUBE_KEY.playlistItems().list(pageToken=nextPageToken, part='snippet',
                                                      playlistId=playlist_id,
                                                      maxResults=50).execute()
            for item in search['items']:
                videos_IDs.append(item['snippet']['resourceId']['videoId'])
    
            try:
                nextPageToken = search['nextPageToken']
            except KeyError:
                break
    
        return videos_IDs
    

    09-04 22:11