#python-3.x #youtube-api #youtube-data-api
Вопрос:
В результатах поиска на YouTube некоторые видео имеют скрытые лайки. Мой код терпит неудачу, когда он достигает этих видео:
KeyError : 'likeCount'
.
Есть ли способ игнорировать такие видео и продолжить мою итерацию?
request = youtube.videos().list(part = "snippet,statistics", id = LIST)
A = request.execute()
for j in range(len(A['items'])):
Data.append({
'Views': A['items'][j]['statistics']['viewCount'],
'Likes': A['items'][j]['statistics']['likeCount'],
'Dislikes': A['items'][i]['statistics']['dislikeCount']
})
Комментарии:
1.
'Likes': A['items'][j]['statistics'].get('likeCount')
?2. @Йоахим Исакссон спасибо тебе 🙂
Ответ №1:
Я бы переписал ваш исходный код, как показано ниже:
request = youtube.videos().list(
part = "snippet,statistics",
id = LIST
)
response = request.execute()
for item in response.get('items', []):
stat = item['statistics']
# items without 'like' and 'dislike'
# count get those counts to be 0
Data.append({
'Views': stat.get('viewCount', 0),
'Likes': stat.get('likeCount', 0),
'Dislikes': stat.get('dislikeCount', 0)
})
Обратите внимание, что все статистические данные в statistics
свойстве ответа, полученного из API, доступны с get
помощью метода, так что, если соответствующее свойство не существует, то его связанное значение принимается равным 0
.
Другая возможность для вашего for
цикла выше будет выглядеть следующим образом:
for item in response.get('items', []):
stat = item['statistics']
# items without 'like' and 'dislike'
# counts are being ignored
if stat.get('likeCount') is None or
stat.get('dislikeCount') is None:
continue
Data.append({
'Views': stat['viewCount'],
'Likes': stat['likeCount'],
'Dislikes': stat['dislikeCount']
})