如何用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
相关产品推荐
相关产品推荐

