YouTube-Nutzungsbedingungen Verwenden Sie den folgenden Code auf eigenes Risiko.
Vor kurzem gab es eine Geschichte über Spoofing in der YouTube-Chat-Spalte und ein Leck in einer Spalte der Spacha. Als eine der Lösungen habe ich unten geschrieben, wie man das Chat-Feld mithilfe der YouTube-API erhält.
Ausgabe
[nach Benutzername 1 Kanal URL 1]
Kommentar 1
[nach Benutzername 2 Kanal URL 2]
Kommentar 2
[nach Benutzername 3 Kanal URL 3]
Betrag vom Benutzernamen 3: "Kommentar 3"← Spacha sieht so aus
start : 2020-06-07T05:21:49.871000Z ← 1. Mal der erworbenen Chat-Gruppe +9 Stunden in Japan
end : 2020-06-07T05:22:02.846000Z ← "das letzte Mal
msg = 'Betrag vom Benutzernamen:" Nachricht "'
https: //www.youtube.com/watch? v = *********** `` ***********
{'key': YT_API_KEY, 'id': video_id, 'part': 'liveStreamingDetails'}
{'key': YT_API_KEY, 'liveChatId': chat_id, 'part': 'id,snippet,authorDetails', 'pageToken': pageToken}
pageToken
zum ersten Mal auf None
record_chat.py
import time
import requests
import json
#YouTube-API-Schlüssel im Voraus erhalten
YT_API_KEY = '***************************************'
def get_chat_id(yt_url):
'''
https://developers.google.com/youtube/v3/docs/videos/list?hl=ja
'''
video_id = yt_url.replace('https://www.youtube.com/watch?v=', '')
print('video_id : ', video_id)
url = 'https://www.googleapis.com/youtube/v3/videos'
params = {'key': YT_API_KEY, 'id': video_id, 'part': 'liveStreamingDetails'}
data = requests.get(url, params=params).json()
liveStreamingDetails = data['items'][0]['liveStreamingDetails']
if 'activeLiveChatId' in liveStreamingDetails.keys():
chat_id = liveStreamingDetails['activeLiveChatId']
print('get_chat_id done!')
else:
chat_id = None
print('NOT live')
return chat_id
def get_chat(chat_id, pageToken, log_file):
'''
https://developers.google.com/youtube/v3/live/docs/liveChatMessages/list
'''
url = 'https://www.googleapis.com/youtube/v3/liveChat/messages'
params = {'key': YT_API_KEY, 'liveChatId': chat_id, 'part': 'id,snippet,authorDetails'}
if type(pageToken) == str:
params['pageToken'] = pageToken
data = requests.get(url, params=params).json()
try:
for item in data['items']:
channelId = item['snippet']['authorChannelId']
msg = item['snippet']['displayMessage']
usr = item['authorDetails']['displayName']
#supChat = item['snippet']['superChatDetails']
#supStic = item['snippet']['superStickerDetails']
log_text = '[by {} https://www.youtube.com/channel/{}]\n {}'.format(usr, channelId, msg)
with open(log_file, 'a') as f:
print(log_text, file=f)
print(log_text)
print('start : ', data['items'][0]['snippet']['publishedAt'])
print('end : ', data['items'][-1]['snippet']['publishedAt'])
except:
pass
return data['nextPageToken']
def main(yt_url):
slp_time = 10 #sec
iter_times = 90 #Mal
take_time = slp_time / 60 * iter_times
print('{}Geplant, um in Minuten zu enden'.format(take_time))
print('work on {}'.format(yt_url))
log_file = yt_url.replace('https://www.youtube.com/watch?v=', '') + '.txt'
with open(log_file, 'a') as f:
print('{}Notieren Sie das Chatfeld von.'.format(yt_url), file=f)
chat_id = get_chat_id(yt_url)
nextPageToken = None
for ii in range(iter_times):
#for jj in [0]:
try:
print('\n')
nextPageToken = get_chat(chat_id, nextPageToken, log_file)
time.sleep(slp_time)
except:
break
if __name__ == '__main__':
yt_url = input('Input YouTube URL > ')
main(yt_url)
Recommended Posts