首页 > 解决方案 > 获取只有字幕 Youtube API 的视频列表

问题描述

我有一个可以使用 Youtube API 搜索视频的 python 代码。
我的输出目标是检索只有字幕/CC 的视频,就像 Youtube Web 上的搜索过滤器一样。
在此处输入图像描述

我当前的代码:

videos = []
def get_videos_by_query(query: str, maxResults: int = 50, pageToken: str = None):
    youtube = build(YOUTUBE_API_SERVICE_NAME,
              YOUTUBE_API_VERSION,
              developerKey=DEVELOPER_KEY)
    try:
        search_response = youtube.search().list(
            part="id,snippet",
            order='date',
            maxResults=maxResults,
            pageToken=pageToken,
            q=query
            ).execute()

        for search_result in search_response.get("items", []):
            if search_result["id"]["kind"] == "youtube#video":
                videoId = search_result["id"]["videoId"]
                data = videoId
                videos.append(data)

    except Exception as e:
        print(e)

我怎样才能做到这一点?

标签: pythonpython-3.xgoogle-apiyoutube-data-apigoogle-api-python-client

解决方案


根据Search.listAPI 端点的文档,为了在获得的结果集上实现所需的过滤,您应该使用以下参数:

视频字幕(字符串)

videoCaption 参数指示 API 是否应根据视频搜索结果是否有字幕来过滤它们。如果为此参数指定值,则还必须将type参数的值设置为video

可接受的值为:

  • any– 不要根据字幕可用性过滤结果。
  • closedCaption– 仅包含有字幕的视频。
  • none– 仅包含没有字幕的视频。

因此,请将您对youtube.search().list()上述的调用替换为以下调用:

search_response = youtube.search().list(
        part="id,snippet",
        order='date',
        type='video',
        videoCaption='closedCaption',
        maxResults=maxResults,
        pageToken=pageToken,
        q=query
        ).execute()

请注意,通过此更改,以下代码变得多余:

if search_result["id"]["kind"] == "youtube#video":

这是因为,通过type='video'调用 API 端点,获得的结果集中的每个项目都必然是指视频。


推荐阅读