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

YouTube API如何获取频道全部播放列表(含从其他频道保存的)

问题原因

你当前调用的youtube.playlists().list()接口传入channelId参数时,仅会返回对应频道自主创建的播放列表。你从其他频道保存的公开播放列表不属于该频道的自有资产,因此不会被该接口返回,这是YouTube Data API的设计规则。

解决步骤

  1. 首先确认OAuth授权的scope已添加https://www.googleapis.com/auth/youtube.readonly,保证有权限读取账号的活动记录。
  2. 保留你现有获取自有播放列表的逻辑,这部分不需要修改。
  3. 新增逻辑拉取已保存的第三方播放列表:通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:54:04