我正在尝试使用 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/