如何仅从YouTube搜索API(V3)获取免费视频?

时间:2020-09-28 09:53:27

标签: youtube-api youtube-data-api android-youtube-api

我正在使用YouTube数据的Search API v3提取视频。我可以使用下面提到的HTTPS GET请求正确提取视频。但是,该API也会列出付费视频,例如ID为FKUvkKsTzV8的视频。我想从获取中跳过。

我已经阅读过Search API文档,但无法识别仅获取免费视频(而非付费视频)的过滤器。

请建议我使用过滤器,以仅从Search API中获取免费视频(如果有)。

这是我的HTTPS GET请求的网址:

https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=5&q=frozen&key=[My api key]&type=video&order=relevance

编辑了更多信息:

给定的视频是一个示例,仅在某些区域播放。因此,添加一些类似于上述视频的内容。我想从搜索结果中跳过这类视频。

https://www.youtube.com/watch?v=ZMWjixQbqXY

https://www.youtube.com/watch?v=Zat88Rsxp94

https://www.youtube.com/watch?v=2YQ9W0BP2Gw

下面提供了免费播放的视频

https://www.youtube.com/watch?v=7TavVZMewpY

1 个答案:

答案 0 :(得分:0)

通过查看问题中提到的ID的视频附带的Videos resource元数据,我们可以推断出您的问题可以按如下方式重新编写:

请使用Search.list API端点来搜索视频(根据需要使用参数q),但请从端点提供的结果集中排除不允许在某些(给定)区域观看

每个视频所附的Videos resource确实包含指定上述特定条件的信息,即属性:

contentDetails.regionRestriction(对象)
regionRestriction对象包含有关可观看(或不可观看)视频的国家/地区的信息。该对象将包含contentDetails.regionRestriction.allowed属性或contentDetails.regionRestriction.blocked属性。

contentDetails.regionRestriction.allowed[](列表)
区域代码列表,用于标识可观看视频的国家/地区。如果存在此属性,但未在其值中列出一个国家/地区,则该视频将无法在该国家/地区播放。如果该属性存在并且包含一个空列表,那么该视频将在所有国家/地区被屏蔽。

contentDetails.regionRestriction.blocked[](列表)
区域代码列表,用于标识视频被阻止的国家/地区。如果存在此媒体资源,但未在其值中列出一个国家/地区,则该视频可以在该国家/地区观看。如果该属性存在并且包含一个空列表,则该视频在所有国家/地区都可以观看。

不幸的是,一个无法为Search.list端点明确指定 基于这些属性的过滤器

尽管如此,您可以从Search.list保留尽可能多的ID,然后查询Videos.list API端点以获取这些属性的确切含义,目的是以编程方式过滤掉在您感兴趣的区域。

将调用Videos.list端点的URL如下:

https://www.googleapis.com/youtube/v3/videos?key=$APP_KEY&id=$VIDEO_IDS&part=contentDetails,id&fields=items(id,contentDetails(regionRestriction))&maxResults=$VIDEO_COUNT

其中$APP_KEY是您的API密钥,$VIDEO_IDS是逗号分隔的视频ID列表,$VIDEO_COUNT$VIDEO_IDS包含的视频ID数量。 (请注意,$VIDEO_COUNT不能超过50。)

请注意,以上URL使用参数fields用于从端点仅获取实际使用的属性。 (最好只从API询问真正需要的信息。)

$VIDEO_COUNT设置为5并将$VIDEO_IDS设置为

FKUvkKsTzV8,ZMWjixQbqXY,Zat88Rsxp94,2YQ9W0BP2Gw,7TavVZMewpY

在上面的URL中,Videos.list返回以下JSON文本:

{
  "items": [
    {
      "id": "FKUvkKsTzV8",
      "contentDetails": {
        "regionRestriction": {
          "allowed": [
            "BE",
            "NL"
          ]
        }
      }
    },
    {
      "id": "ZMWjixQbqXY",
      "contentDetails": {
        "regionRestriction": {
          "allowed": [
            "NL"
          ]
        }
      }
    },
    {
      "id": "Zat88Rsxp94",
      "contentDetails": {
        "regionRestriction": {
          "allowed": [
            "BE",
            "NL"
          ]
        }
      }
    },
    {
      "id": "2YQ9W0BP2Gw",
      "contentDetails": {
        "regionRestriction": {
          "allowed": [
            "PE",
            "KG",
            "PA",
            "PL",
            "PH",
            "TZ",
            "TW",
            "TH",
            "TJ",
            "TM",
            "PY",
            "KZ",
            "GR",
            "CY",
            "GT",
            "CZ",
            "CV",
            "CR",
            "GA",
            "CL",
            "CO",
            "CI",
            "SN",
            "SI",
            "SK",
            "SE",
            "NP",
            "KH",
            "NI",
            "ID",
            "NO",
            "NL",
            "NA",
            "NE",
            "PT",
            "BZ",
            "BY",
            "BW",
            "BO",
            "BJ",
            "BF",
            "BE",
            "ZW",
            "MU",
            "MT",
            "VE",
            "EE",
            "EC",
            "IS",
            "MD",
            "RW",
            "ML",
            "AZ",
            "ZM",
            "LV",
            "AR",
            "AO",
            "AM",
            "TG",
            "SG",
            "DK",
            "LT",
            "UZ",
            "UY",
            "DO",
            "HU",
            "LA",
            "HN",
            "UG",
            "LK",
            "UA",
            "FI",
            "SV"
          ]
        }
      }
    },
    {
      "id": "7TavVZMewpY",
      "contentDetails": {}
    }
  ]
}

此响应表明,FKUvkKsTzV8所标识的视频仅在NLBE区域中可见,而7TavVZMewpY所标识的视频根本没有区域限制(即可以在任何地方自由观看)。

现在,访问对象items[].contantDetails.regionRestriction下的属性非常简单,以从过滤的结果集中中排除您感兴趣的区域内看不到的那些视频ID。< / p>


附录

不确定下面的内容会有所帮助,但是,尽管如此,我不得不提及Search.list端点确实具有以下参数:

regionCode(字符串)
regionCode参数指示API返回可以在指定国家/地区观看的视频的搜索结果。参数值为ISO 3166-1 alpha-2国家/地区代码。

以上官方规范并未指明regionCode是否允许指定一组区域 ,否则,如何指定regionCode该区域组所有地区。