YouTube API如何获取频道全部播放列表(含从其他频道保存的)
问题原因
你当前调用的youtube.playlists().list()接口传入channelId参数时,仅会返回对应频道自主创建的播放列表。你从其他频道保存的公开播放列表不属于该频道的自有资产,因此不会被该接口返回,这是YouTube Data API的设计规则。
解决步骤
- 首先确认OAuth授权的scope已添加
https://www.googleapis.com/auth/youtube.readonly,保证有权限读取账号的活动记录。 - 保留你现有获取自有播放列表的逻辑,这部分不需要修改。
- 新增逻辑拉取已保存的第三方播放列表:通过
youtube.activities().list()接口拉取账号的活动记录,筛选出保存播放列表的对应记录,提取第三方播放列表ID后再单独拉取播放列表详情即可。
参考代码示例
# 1. 先获取自有播放列表(原有逻辑) own_playlists = [] request = youtube.playlists().list( part="snippet,contentDetails,status", channelId="UC_x5XG1OV2P6uZZ5FSM9Ttw", maxResults=25 ) response = request.execute() own_playlists = response.get("items", []) own_playlist_ids = [item["id"] for item in own_playlists] # 2. 获取已保存的第三方播放列表 saved_playlists = [] request = youtube.activities().list( part="snippet,contentDetails", mine=True, maxResults=50 ) response = request.execute() for item in response.get("items", []): resource_id = item["contentDetails"].get("playlistItem", {}).get("resourceId", {}) # 筛选保存播放列表的活动记录 if item["snippet"]["type"] == "playlistItem" and resource_id.get("kind") == "youtube#playlist": playlist_id = resource_id["playlistId"] # 过滤掉自有播放列表,避免重复 if playlist_id not in own_playlist_ids and playlist_id not in [p["id"] for p in saved_playlists]: # 拉取第三方播放列表详情 pl_request = youtube.playlists().list( part="snippet,contentDetails,status", id=playlist_id ) pl_response = pl_request.execute() if pl_response.get("items"): saved_playlists.append(pl_response["items"][0]) # 合并后即为全部播放列表 all_playlists = own_playlists + saved_playlists
注意事项
如果账号保存的播放列表数量较多,可通过接口返回的nextPageToken参数分页拉取所有活动记录,完成去重后即可拿到全部已保存的第三方播放列表。
内容的提问来源于stack exchange,提问作者b3422
相关产品推荐
相关产品推荐

