python - 如何使用 youtube data api 检查 Creativecommons 视频?我有以下代码,如果视频是知识共享,如何打印 true?

标签 python json youtube-api urllib2 youtube-data-api

我正在尝试使用 YouTube 数据 API 下载一些知识共享视频,但我对此还很陌生,所以我陷入了困境。如何继续前进?我想在 JSON 文件中找到 "license": "creativeCommon",如果为 true 则打印 true 。

import urllib.request as urllib2
import json
response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
data = list(json.load(response))


{
 "kind": "youtube#videoListResponse",
 "etag": "\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/3jdRB-NXSAfUQj7e_FmBbivkK1o\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {
   "kind": "youtube#video",
   "etag": "\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/NUd32t1_moLGAwVuu-ZujlkaiWM\"",
   "id": "gwLej8heN5c",
   "status": {
    "uploadStatus": "processed",
    "privacyStatus": "public",
    "license": "creativeCommon",
    "embeddable": true,
    "publicStatsViewable": true
   }
  }
 ]
}

最佳答案

@goodvibration 答案是正确的,只要记住 json.load 使用了 read 函数,这意味着一旦读取了数据,就无法再次读取。在这种情况下,它将返回空字节字符串。

此代码的工作原理是在末尾打印 True。

response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
for item in json.load(response)['items']: print(item['status']['license'] == 'creativeCommon')

此外,在原始示例和错误示例中,您在保存数据时使用了 list(json.load(response)) 。这意味着,您无法获得整个 json,而只能获得键。因此,就您而言,我建议不要更改对列表的响应。但由于您稍后在示例中没有使用数据变量,因此它并没有真正改变结果。但如果您想检查/保存更多信息,这可能很重要。

另外,在这种情况下,由于 json.load() 使用了 read 函数,该函数不能多次使用,因此需要保存整个 json,然后从中读取。代码将是:

response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
data = json.load(response)
for item in data['items']: print(item['status']['license'] == 'creativeCommon')

如果您尝试阅读收到的回复,您就会看到这一点。您可以输入以下代码来测试它:

response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
print(response.read())
print(response.read())

在这种情况下,结果将是:

b'{\n "kind": "youtube#videoListResponse",\n "etag": "\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/3jdRB-NXSAfUQj7e_FmBbivkK1o\\"",\n "pageInfo": {\n  "totalResults": 1,\n  "resultsPerPage": 1\n },\n "items": [\n  {\n   "kind": "youtube#video",\n   "etag": "\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/NUd32t1_moLGAwVuu-ZujlkaiWM\\"",\n   "id": "gwLej8heN5c",\n   "status": {\n    "uploadStatus": "processed",\n    "privacyStatus": "public",\n    "license": "creativeCommon",\n    "embeddable": true,\n    "publicStatsViewable": true\n   }\n  }\n ]\n}\n'
b''

第一种情况,结果是字节字符串形式的 json,而第二种情况是空字节字符串。因此,当您尝试在同一响应元素上使用多个 json.load() 时,您将收到 JSONDecodeError (与您的评论中相同),因为第二次没有要解析的 json。

关于python - 如何使用 youtube data api 检查 Creativecommons 视频?我有以下代码,如果视频是知识共享,如何打印 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678956/

相关文章:

python - 使用 Python/Django 从 html 获取第一张图片

ios - 附加图像并发布到 JSON API

jquery - 正确响应从 ASP.NET 页面发送的 jquery.ajax json 数据

php - YouTube API - 如何指定要上传到哪个 channel

javascript - Youtube 视频统计

python - 如何检测一个点是否位于 2D numpy 数组中的非矩形区域?

python正则表达式也匹配特殊字符

python - 在 numba 中使用 numpy.vstack

java - 如何在 JSON 对象中发布此类数据

ios - 如何从 REST API search.list 结果中过滤掉 YouTube 的内容屏蔽视频