KeyError с API Youtube с использованием python

Это мой первый раз, чтобы спросить что-то здесь. Я пытался получить доступ к API Youtube, чтобы получить что-то для эксперимента, который я делаю. Пока все работает. Я просто хотел спросить об этой очень непоследовательной ошибке, которую я получаю.

-----------
1
Title:  All Movie Trailers of New York Comic-Con (2016) Power Rangers, John Wick 2...
Uploaded by:    KinoCheck International
Uploaded on:    2016-10-12T14:43:42.000Z
Video ID:   pWOH-OZQUj0
2
Title:  Movieclips Trailers
Uploaded by:    Movieclips Trailers
Uploaded on:    2011-04-01T18:43:14.000Z
Video ID:   Traceback (most recent call last):
  File "scrapeyoutube.py", line 24, in <module>
    print "Video ID:\t", search_result['id']['videoId']
KeyError: 'videoId'

Я попытался получить идентификатор видео («videoID» согласно документации). Но по какой-то причине код работает для 1-го запроса, а затем полностью проваливается для 2-го. Это странно, потому что это происходит только для этого конкретного элемента. Все остальное («описание», «опубликовано в» и т. д.) работает. Вот мой код:

    from apiclient.discovery import build
import json
import pprint
import sys

APINAME = 'youtube'
APIVERSION = 'v3'
APIKEY = 'secret teehee'

service = build(APINAME, APIVERSION, developerKey = APIKEY)

#volumes source ('public'), search query ('androide')
searchrequest = service.search().list(q ='movie trailers', part ='id, snippet', maxResults = 25).execute()

searchcount = 0
print "-----------"
for search_result in searchrequest.get("items", []):
    searchcount +=1
    print searchcount
    print "Title:\t", search_result['snippet']['title']
    # print "Description:\t", search_result['snippet']['description']
    print "Uploaded by:\t", search_result['snippet']['channelTitle']
    print "Uploaded on:\t", search_result['snippet']['publishedAt']
    print "Video ID:\t", search_result['id']['videoId']

Надеюсь, вы, ребята, можете мне помочь. Спасибо!


person Furankisan    schedule 21.10.2016    source источник
comment
В вашем описании упоминается videoID, но в коде используется videoId. (Конечно, это работает для первого видео, так что может быть просто опечатка?)   -  person John Gordon    schedule 21.10.2016
comment
Ага! Ты понял. Спасибо! Я понимаю, что никогда не благодарил тебя за ответ   -  person Furankisan    schedule 02.08.2017


Ответы (2)


Используйте метод 'get' для результата.

result['id'].get('videoId')

в каком-то элементе нет этого ключа. если вы используете квадратные скобки, python выбрасывает исключение keyError, но если вы используете метод «get», python возвращает None для элемента, у которого нет ключа videoId

person Viktor Miroshnikov    schedule 22.11.2019

Поскольку некоторые результаты для ключа "ID" возвращаются:

{u'kind': u'youtube#playlist', u'playlistId': u'PLd0_QArxznVHnlvJp0ki5bpmBj4f64J7P'}

Как видите, ключа "videoId" нет.

person Gabriel Meinberg Renó    schedule 01.08.2017