如何在嵌套JSON API响应中通过视频名称查询Video ID?
根据视频名称获取对应Video ID的实现方案
问题说明
通过requests.get调用API已获取状态码200的嵌套JSON响应,需求是输入视频名称(如film10),用Python返回对应的Video ID(如82da4b60ef)。
提供的JSON响应示例
{ "results": [{ "accountId": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "id": "6ed909bd16", "partition": null, "externalId": null, "metadata": null, "name": "NewSeptemberFile20220908", "description": null, "created": "2022-09-12T22:04:55.799+00:00", "lastModified": "2022-09-12T22:06:10.838+00:00", "lastIndexed": "2022-09-12T22:05:04.551+00:00", "privacyMode": "Private", "userName": "M M", "isOwned": true, "isBase": true, "hasSourceVideoFile": true, "state": "Processed", "moderationState": "OK", "reviewState": "None", "processingProgress": "100%", "durationInSeconds": 58, "thumbnailVideoId": "6ed909bd16", "thumbnailId": "5f04af4d-e382-4387-9573-6d9e4bad3b68", "searchMatches": [], "indexingPreset": "Default", "streamingPreset": "Default", "sourceLanguage": "en-GB", "sourceLanguages": ["en-GB"], "personModelId": "00000000-0000-0000-0000-000000000000" }, { "accountId": "XXXXXXXXXXXXXXXXX", "id": "34344818e8", "partition": null, "externalId": null, "metadata": null, "name": "3September", "description": null, "created": "2022-09-09T17:55:59.696+00:00", "lastModified": "2022-09-09T17:57:51.057+00:00", "lastIndexed": "2022-09-09T17:56:04.544+00:00", "privacyMode": "Private", "userName": "M M", "isOwned": true, "isBase": true, "hasSourceVideoFile": true, "state": "Processed", "moderationState": "OK", "reviewState": "None", "processingProgress": "100%", "durationInSeconds": 58, "thumbnailVideoId": "34344818e8", "thumbnailId": "baae7ed1-a791-4481-853c-1707b40b5e77", "searchMatches": [], "indexingPreset": "Default", "streamingPreset": "Default", "sourceLanguage": "en-GB", "sourceLanguages": ["en-GB"], "personModelId": "00000000-0000-0000-0000-000000000000" }, { "accountId": "XXXXXXXXXXXXXXXXXXXXXXXXX", "id": "82da4b60ef", "partition": null, "externalId": null, "metadata": null, "name": "film10", "description": null, "created": "2022-08-22T14:24:08.442+00:00", "lastModified": "2022-09-08T23:13:16.416+00:00", "lastIndexed": "2022-08-22T14:24:12.605+00:00", "privacyMode": "Private", "userName": "M M", "isOwned": true, "isBase": true, "hasSourceVideoFile": true, "state": "Processed", "moderationState": "OK", "reviewState": "None", "processingProgress": "100%", "durationInSeconds": 58, "thumbnailVideoId": "82da4b60ef", "thumbnailId": "5a5f6a71-0302-46a6-93c8-beb918c00b14", "searchMatches": [], "indexingPreset": "Default", "streamingPreset": "Default", "sourceLanguage": "en-GB", "sourceLanguages": ["en-GB"], "personModelId": "00000000-0000-0000-0000-000000000000" }, { "accountId": "XXXXXXXXXXXXXXX", "id": "7ea0c5e34a", "partition": null, "externalId": null, "metadata": null, "name": "davide_quatela--people_in_frankfurt", "description": null, "created": "2022-09-07T21:31:52.818+00:00", "lastModified": "2022-09-08T22:52:52.833+00:00", "lastIndexed": "2022-09-07T21:31:57.328+00:00", "privacyMode": "Private", "userName": "M M", "isOwned": true, "isBase": true, "hasSourceVideoFile": true, "state": "Processed", "moderationState": "OK", "reviewState": "None", "processingProgress": "100%", "durationInSeconds": 131, "thumbnailVideoId": "7ea0c5e34a", "thumbnailId": "3aba8f42-a3a7-4d77-92b0-8cabcc275a3b", "searchMatches": [], "indexingPreset": "Default", "streamingPreset": "Default", "sourceLanguage": "en-US", "sourceLanguages": ["en-US"], "personModelId": "00000000-0000-0000-0000-000000000000" }, { "accountId": "XXXXXXXXXXXXXXXXXX", "id": "7c45ae7ffe", "partition": null, "externalId": null, "metadata": null, "name": "Untitled project", "description": null, "created": "2022-08-17T17:36:23.72+00:00", "lastModified": "2022-08-17T17:36:49.95+00:00", "lastIndexed": "2022-08-17T17:36:49.95+00:00", "privacyMode": "Private", "userName": "M M", "isOwned": true, "isBase": false, "hasSourceVideoFile": false, "state": "Processed", "moderationState": "OK", "reviewState": "None", "processingProgress": "", "durationInSeconds": 0, "thumbnailVideoId": null, "thumbnailId": "00000000-0000-0000-0000-000000000000", "searchMatches": [], "indexingPreset": null, "streamingPreset": "Default", "sourceLanguage": "en-US", "sourceLanguages": ["en-US"], "personModelId": "00000000-0000-0000-0000-000000000000" } ], "nextPage": { "pageSize": 25, "skip": 0, "done": true } }
现有代码
import requests url = "https://api.video.ai/trial/Accounts//Videos/7ea0c5e34a/Index?language=af-ZA&reTranslate=false&includeStreamingUrls=true&includeSummarizedInsights=true&accessToken=" hdr = {} # 这里需要补充你的请求头信息 response = requests.get(url, headers=hdr) # 响应状态码200表示请求成功 print("请求状态码:", response.status_code)
解决方案
实现逻辑
- 将API响应解析为Python字典。
- 遍历
results列表中的每个视频条目,匹配输入的视频名称。 - 返回匹配条目的
id字段;若未找到匹配项,返回提示信息。
完整代码
import requests def get_video_id_by_name(video_name): url = "https://api.video.ai/trial/Accounts//Videos/7ea0c5e34a/Index?language=af-ZA&reTranslate=false&includeStreamingUrls=true&includeSummarizedInsights=true&accessToken=" hdr = {} # 补充你的请求头信息 response = requests.get(url, headers=hdr) if response.status_code != 200: print(f"请求失败,状态码:{response.status_code}") return None # 解析JSON响应 data = response.json() # 遍历视频列表查找匹配项 for video in data.get("results", []): if video.get("name") == video_name: return video.get("id") # 未找到匹配的视频名称 return f"未找到名称为'{video_name}'的视频" # 测试示例 if __name__ == "__main__": target_name = "film10" video_id = get_video_id_by_name(target_name) print(f"视频名称'{target_name}'对应的ID:{video_id}")
补充说明
- 大小写敏感:当前匹配是严格区分大小写的,若需要忽略大小写,可将判断条件改为
video.get("name").lower() == video_name.lower()。 - 多匹配处理:如果存在多个同名视频,上述代码会返回第一个匹配项的ID;若需要返回所有匹配项,可将返回逻辑改为收集所有符合条件的ID后返回列表。
内容的提问来源于stack exchange,提问作者mnn
相关产品推荐
相关产品推荐

