Как игнорировать видео с отключенным количеством лайков при использовании API данных YouTube V3

#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']
  })