我正在使用YouTube Data的Search v3来获取视频。我能够用下面提到的HTTPS GET请求正确地获取视频。但是这个API也列出了付费视频,比如有ID FKUvkKsTzV8的视频。我想从抓取中跳过。
我已经查阅了搜索API文档,但无法识别只获取免费视频的筛选器--而不是付费视频。
请建议我的过滤器只获取免费视频从搜索API,如果有的话。
以下是我的HTTPS GET请求的URL:
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
免费播放的视频如下所示
发布于 2020-09-28 11:52:02
查看您在问题中提到的视频中所附的Videos resource元数据,我推断您的问题可能会被重新表述如下:
请使用
Search.listAPI端点搜索视频--根据需要使用参数q--但是从端点提供的结果集中排除某些(给定)区域不允许查看的视频。
附加到每个视频的Videos resource包含指定上述特定条件的信息,即属性:
contentDetails.regionRestriction (对象)
regionRestriction对象包含有关视频可查看(或不可查看)的国家的信息。对象将包含contentDetails.regionRestriction.allowed属性或contentDetails.regionRestriction.blocked属性。 contentDetails.regionRestriction.allowed[] (名单) 识别视频可查看国家的区域代码列表。如果存在此属性,且未按其值列出国家,则该视频将被禁止在该国家出现。如果该属性存在并包含空列表,则视频将在所有国家被阻塞。 contentDetails.regionRestriction.blocked[] (名单) 标识视频被封锁的国家的区域代码列表。如果存在此属性,并且没有在其值中列出国家,则该视频在该国是可查看的。如果该属性存在并包含空列表,则该视频可在所有国家查看。
不幸的是,不能向Search.list端点显式指定基于这些属性的筛选器。
尽管如此,您可以从Search.list保留尽可能多的in,然后查询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标识的视频只能在NL和BE区域查看,而7TavVZMewpY标识的视频完全不受区域限制(即在任何地方都可以自由查看)。
现在,访问对象items[].contantDetails.regionRestriction下的属性非常简单,以便从过滤的结果集中排除那些在您感兴趣的区域内不可查看的视频it。
增编
不确定下面的内容是否有帮助,但我必须指出,Search.list端点确实具有以下参数:
regionCode (字符串)
regionCode参数指示API返回可在指定国家查看的视频的搜索结果。参数值是ISO 3166-1 alpha-2国家代码。
上述官方规范没有说明regionCode是否允许指定一组区域,或者,否则,如何指定所有区域集的regionCode。
https://stackoverflow.com/questions/64099879
复制相似问题