Python '的键错误;片段';使用YouTube API RelatedToVideoID功能时
这是我有史以来第一个关于堆栈溢出的问题,所以如果有任何不清楚的地方,请告诉我。:) 我的问题有点与你有关。我正在尝试使用YouTube API为我的论文采集视频样本。我用下面的代码成功地做到了这一点;但是,当我将条件从查询(q)更改为relatedToVideoId时,解包部分由于某种原因中断。。它在我的循环外工作,但在循环内不工作(来自另一个线程的.get()建议也是如此)。有人知道为什么会这样吗?我如何解决 这是我编写的(缩短的)代码,您可以使用它来复制问题:Python '的键错误;片段';使用YouTube API RelatedToVideoID功能时,python,for-loop,youtube-api,append,keyerror,Python,For Loop,Youtube Api,Append,Keyerror,这是我有史以来第一个关于堆栈溢出的问题,所以如果有任何不清楚的地方,请告诉我。:) 我的问题有点与你有关。我正在尝试使用YouTube API为我的论文采集视频样本。我用下面的代码成功地做到了这一点;但是,当我将条件从查询(q)更改为relatedToVideoId时,解包部分由于某种原因中断。。它在我的循环外工作,但在循环内不工作(来自另一个线程的.get()建议也是如此)。有人知道为什么会这样吗?我如何解决 这是我编写的(缩短的)代码,您可以使用它来复制问题: import numpy as
import numpy as np
import pandas as pd
# Allocate credentials:
from googleapiclient.discovery import build
api_key = "YOUR KEY SHOULD GO HERE"
# Session Build
youtube = build('youtube', 'v3', developerKey = api_key)
df_sample_v2 = pd.DataFrame(columns = ["Video.ID", "Title", "Channel Name"])
keywords = ['Global Warming',
'Coronavirus'
]
iter = list(range(1, 150))
rand_selec_ids = ['H6u0VBqNBQ8',
'LEZCxxKp0hM'
]
for i in iter:
# Search Request
request = youtube.search().list(
part = "snippet",
#q = keywords[4],
relatedToVideoId = rand_selec_ids[1],
type = "video",
maxResults = 5000,
videoCategoryId = 28,
order = "relevance",
eventType = "completed",
videoDuration = "medium"
)
# Save Response
response = request.execute()
# Unpack Response
rows = []
for i in list(range(0, response['pageInfo']['resultsPerPage'])):
rows.append([response['items'][i]['id']['videoId'],
response['items'][i]['snippet']['title'], # this is the problematic line
response['items'][i]['snippet']['channelTitle']]
)
temp = pd.DataFrame(rows, columns = ["Video.ID", "Title", "Channel Name"])
df_sample_v2 = df_sample_v2.append(temp)
print(f'{len(df_sample_v2)} videos retrieved!')
我得到的KeyError位于rows.append()的第二行,在那里我尝试访问代码段
KeyError Traceback (most recent call last)
<ipython-input-90-c6c01139e372> in <module>
45
46 rows.append([response['items'][i]['id']['videoId'],
---> 47 response['items'][i]['snippet']['title'],
48 response['items'][i]['snippet']['channelTitle']]
49 )
KeyError: 'snippet'
keyrerror回溯(最近一次调用)
在里面
45
46行。追加([response['items'][i]['id']['videoId'],
--->47响应['items'][i]['snippet']['title'],
48响应['items'][i]['snippet']['channelTitle']]
49 )
KeyError:“代码段”
您的问题源于以下事实:数组项的大小的属性resultsPerPage
迭代从API获得的项的正确方法如下(这也是进行此类迭代的一般python方法):
对于响应中的项['items']:
行。追加([
项目['id']['videoId'],
项目['snippet']['title'],
项目['snippet']['channelTitle']
])
您可以在代码中添加类似下面的调试代码,以使自己相信我的说法
print(f“resultsPerPage={response['pageInfo']['resultsPerPage']}”)
打印(f“len(items)={len(response['items]]))
请提供完整的回溯对不起!我添加了问题的回溯。'snippet'
在item:response['item'][I]
之后不存在:response['snippet']
您确定它不应该是类似于response['item'][I].key()的东西吗?可能首先在response['item'][I]中使用.key()
查看您获得了哪些密钥-或者在尝试获取密钥之前,检查响应['item'][i]中的'snippet'是否为:
。可能服务器没有发送此信息。对于响应中的项目['items']:行。追加([item['id']['videoId'],…])
非常感谢!这确实是我遇到的问题的根源:)了不起的工作!