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

YouTube API分页获取频道上传活动未返回全部结果求助

问题原因与解决方案

为什么只拿到29条上传记录?

  • YouTube Data API的activities.list接口不是获取频道全部上传视频的正确方式。这个接口的定位是返回频道的公开动态活动(涵盖上传、点赞、评论、观看等多种类型),且API对返回的活动数量有上限,不会返回频道建立以来的所有历史活动,仅能获取到部分近期或公开的活动条目,所以你只能拿到少量上传记录。
  • 你看到的日期混乱现象,是因为activities.list默认返回所有类型活动的混合结果,按发布时间降序排列,不同类型活动的时间跨度大,因此看起来像是随机抽取的。

为什么能看到Thomas Frank的观看活动?

这是因为他的YouTube账号设置了公开观看历史。YouTube允许用户将自己的观看、点赞等活动设为公开状态,此时其他人就能通过API获取到这些公开活动;而你的账号大概率设置了隐藏观看历史,所以自身的观看活动不会被API返回。

正确获取频道全部上传视频的方法

要获取频道所有上传视频,应该使用playlistItems.list接口——每个YouTube频道都有一个专属的「上传视频」播放列表,其ID规则是:将频道ID开头的UC替换为UU。

修正后的代码

import googleapiclient.discovery

api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

def main():
    api_service_name = "youtube"
    api_version = "v3"
    
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey=api_key)
    
    # 频道ID转上传播放列表ID:把开头的UC换成UU
    channel_id = "UCG-KntY7aVnIGXYEBQvmBAQ"
    upload_playlist_id = "UU" + channel_id[2:]
    
    next_page_token = None
    while True:
        request = youtube.playlistItems().list(
            part="snippet,contentDetails",
            playlistId=upload_playlist_id,
            maxResults=50,
            pageToken=next_page_token
        )
        response = request.execute()
        
        for item in response['items']:
            video_id = item['contentDetails']['videoId']
            title = item['snippet']['title']
            print("upload", video_id, title)
        
        next_page_token = response.get('nextPageToken')
        # 没有下一页时终止循环
        if not next_page_token:
            break

if __name__ == "__main__":
    main()

代码说明

  • 转换频道ID为上传播放列表ID是核心步骤,频道所有公开上传的视频都存储在这个默认列表中。
  • playlistItems.list支持完整分页,能获取到该播放列表下的所有视频,彻底解决activities.list的数量限制和类型混杂问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:50:03