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

使用YouTube Data API v3获取博主视频发布时间遇KeyError问题求助

问题根源与解决方案

核心问题是你把频道用户名(@RemusNeo)当成了channel_id传给API,YouTube Data API v3不接受直接用用户名作为channel_id参数,所以返回的响应里没有items字段,触发KeyError: 'items'。

下面是完整的修复步骤和代码:

1. 通过用户名获取正确的频道ID

调用channels.list接口,用forHandle参数传入用户名(@后面的部分,即RemusNeo),就能拿到频道ID:

import googleapiclient.discovery

API_KEY = '你的API密钥'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'

youtube = googleapiclient.discovery.build(
    YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=API_KEY)

# 通过用户名获取频道ID
def get_channel_id(handle):
    request = youtube.channels().list(
        part='id',
        forHandle=handle
    )
    response = request.execute()
    if not response.get('items'):
        raise ValueError(f"找不到用户名 {handle} 对应的频道")
    return response['items'][0]['id']

channel_id = get_channel_id('RemusNeo')
print(f"正确的频道ID: {channel_id}")

2. 获取频道的上传列表ID

每个YouTube频道都有一个专门的上传播放列表,包含所有公开视频,需要先拿到这个播放列表ID:

def get_upload_playlist_id(channel_id):
    request = youtube.channels().list(
        part='contentDetails',
        id=channel_id
    )
    response = request.execute()
    return response['items'][0]['contentDetails']['relatedPlaylists']['uploads']

upload_playlist_id = get_upload_playlist_id(channel_id)

3. 获取最近50个视频的发布时间

调用playlistItems.list接口,指定上传列表ID,请求snippet部分就能直接拿到视频的发布时间:

def get_recent_videos(playlist_id, max_results=50):
    videos = []
    request = youtube.playlistItems().list(
        part='snippet',
        playlistId=playlist_id,
        maxResults=max_results
    )
    while request:
        response = request.execute()
        for item in response['items']:
            video_info = {
                'title': item['snippet']['title'],
                'published_at': item['snippet']['publishedAt']
            }
            videos.append(video_info)
        # 处理分页(如果视频超过50个)
        request = youtube.playlistItems().list_next(request, response)
    return videos

recent_videos = get_recent_videos(upload_playlist_id)
# 打印前5个视频的发布时间示例
for video in recent_videos[:5]:
    print(f"{video['title']}: {video['published_at']}")

额外说明

  • 之前查询单个视频详情正常,是因为视频ID直接有效,不需要转换;订阅数查询失败,同样是因为用了错误的channel_id。
  • 注意API配额:channels.list和playlistItems.list每次调用各消耗1个配额,确保你的API配额足够支撑调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:02:16