Я пытаюсь создать сценарий python, который отображает чат в реальном времени через командную строку. Я нашел комментарий пользователя: 10914284 в вопросе Не могу получить живой чат из потока, который мне не принадлежит , и я немного изменил его ответ. Эта программа работает немного, но через некоторое время выдает два типа ошибок. Он может отображать чат в прямом эфире в течение некоторого времени, после чего выдает KeyError:
Traceback (most recent call last):
File "get_chat.py", line 58, in <module>
print_message()
File "get_chat.py", line 54, in print_message
for i in range(len(messages['items'])):
KeyError: 'items'
Странно, если я пытаюсь запустить программу несколько раз, он вызывает ошибку TypeError, даже если пару минут go скрипт работал отлично.
Traceback (most recent call last):
File "get_chat.py", line 22, in <module>
vID = r.get('items')[0]['id']['videoId']
TypeError: 'NoneType' object is not subscriptable
Код:
import requests
import json
API_KEY = 'YOUTUBE_API_KEY_HERE'
channelID = 'UC9pYOJPB5UYlMlGKKZWo-Bw' # Random youtube channel that is currently broadcasting a youtube livestream
params = {
'part': 'id',
'key': API_KEY,
'channelId': channelID,
'eventType': 'live',
'type': 'video',
'order': 'viewCount',
'fields': 'items(id(videoId))'
}
url = 'https://www.googleapis.com/youtube/v3/search'
r = requests.get(url, headers=None, params=params).json()
vID = r.get('items')[0].get('id').get('videoId')
#vID = r.get('items')[0]['id']['videoId'] returns same KeyError
params = {
'part': 'liveStreamingDetails,statistics,snippet',
'key': API_KEY,
'id': vID,
'fields': 'items(id,liveStreamingDetails(activeLiveChatId,concurrentViewers,actualStartTime),' + \
'snippet(channelId,channelTitle,description,liveBroadcastContent,publishedAt,thumbnails,title),statistics)'
}
url = 'https://www.googleapis.com/youtube/v3/videos'
r = requests.get(url, headers=None, params=params).json()
streamData = dict(r.get('items')[0])
chatID = streamData['liveStreamingDetails']['activeLiveChatId']
params = {
'part': 'snippet',
'key': API_KEY,
'liveChatId': chatID,
#'profileImageSize': 720,
'maxResults': 200
}
url = 'https://www.googleapis.com/youtube/v3/liveChat/messages'
def print_message():
while True:
messages = requests.get(url, headers=None, params=params).json()
for i in range(len(messages['items'])):
print(messages['items'][i]['snippet']['displayMessage'])
print_message()
У меня есть несколько гипотез, почему это может происходить. Для KeyError, возможно, при наличии более 200 сообщений ('maxResults': 200
) возникает ошибка. Я попытался изменить значение ''maxResults'
на что-то вроде 2000, но ошибка все еще появляется. Ошибка TypeError появляется только в том случае, если вы пытаетесь запустить скрипт несколько раз и через некоторое время выдает эту ошибку. Я думаю, что это может произойти, потому что я запрашиваю, и сообщения перекрываются? И как-то это вне диапазона? Другая возможность состоит в том, что я использовал все свои квоты Google за день, и API не вернет мне ничего.
Любая помощь будет принята с благодарностью. Большое спасибо.