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

如何用Python调用YouTube API的search.list按时间正序获取视频?

YouTube search.list 按时间正序获取视频的实现方案

YouTube Data API 的 search.list 接口没有直接提供按发布时间**正序(最早到最晚)**排序的参数,order=date 默认就是从最新到最旧排列。针对你的需求,这里有两种实用的Python实现方式:

方案一:批量获取后反转列表(最简洁)

你提到反转操作繁琐,但实际用Python处理只需要一行代码,完全不麻烦。先按order=date获取指定时间范围的所有结果,再反转列表即可:

from googleapiclient.discovery import build

# 替换成你的API密钥
API_KEY = "your_api_key"
youtube = build('youtube', 'v3', developerKey=API_KEY)

# 构建查询:指定起始日期,按日期倒序获取
request = youtube.search().list(
    q="你的搜索关键词",
    part="snippet",
    order="date",
    publishedAfter="2023-01-01T00:00:00Z",  # ISO 8601格式的起始时间
    maxResults=50  # 单次请求最多返回50条
)

# 分页获取所有符合条件的结果
all_results = []
while request:
    response = request.execute()
    all_results.extend(response['items'])
    request = youtube.search().list_next(request, response)

# 反转列表得到正序结果
sorted_results = all_results[::-1]

# 遍历输出示例
for video in sorted_results:
    print(f"标题: {video['snippet']['title']} | 发布时间: {video['snippet']['publishedAt']}")

这种方法逻辑简单,API调用次数最少,列表反转是轻量操作,几乎不影响性能。

方案二:逐段获取并拼接正序结果(无需最终反转)

如果需要边获取边处理正序数据,可以通过逐步缩小时间范围的方式,每次获取当前区间内的最早一批视频:

from googleapiclient.discovery import build
from datetime import datetime

API_KEY = "your_api_key"
youtube = build('youtube', 'v3', developerKey=API_KEY)

start_time = "2023-01-01T00:00:00Z"
current_end_time = datetime.utcnow().isoformat() + "Z"
sorted_results = []

while True:
    request = youtube.search().list(
        q="你的搜索关键词",
        part="snippet",
        order="date",
        publishedAfter=start_time,
        publishedBefore=current_end_time,
        maxResults=50
    )
    response = request.execute()
    if not response.get('items'):
        break  # 没有更多结果时停止
    
    # 把当前批次的倒序结果反转后加入总列表,保持正序
    sorted_results.extend(reversed(response['items']))
    # 更新下一次查询的结束时间为当前批次中最早的视频发布时间
    current_end_time = response['items'][-1]['snippet']['publishedAt']

# 输出结果
for video in sorted_results:
    print(f"标题: {video['snippet']['title']} | 发布时间: {video['snippet']['publishedAt']}")

这种方式适合流式处理场景,但逻辑稍复杂,API调用次数和方案一一致。

关键注意点

  • API密钥需要有足够的配额:search.list每次调用消耗100单位配额,注意别超限额。
  • 时间参数必须严格遵循ISO 8601格式,比如YYYY-MM-DDTHH:MM:SSZ,否则会报错。
  • 分页处理是必须的:单次请求最多返回50条结果,超过的话必须用list_next方法分页获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 02:03:11