Conditions d'utilisation de YouTube Utilisez le code ci-dessous à vos propres risques.
Récemment, il y a une histoire sur l'usurpation d'identité dans la colonne de chat YouTube et une fuite dans une colonne de l'espace. En tant que l'une des solutions, j'ai écrit ci-dessous comment obtenir le champ de discussion à l'aide de l'API YouTube.
production
[par nom d'utilisateur 1 chaîne URL 1]
Commentaire 1
[par nom d'utilisateur 2 URL du canal 2]
Commentaire 2
[par nom d'utilisateur 3 URL du canal 3]
Montant du nom d'utilisateur 3: "Commentaire 3"← Spacha ressemble à ceci
start : 2020-06-07T05:21:49.871000Z ← 1ère fois du groupe de discussion acquis +9 heures au Japon
end : 2020-06-07T05:22:02.846000Z ← "la dernière fois
slp_time = 15
, ʻiter_times = 240 dans la fonction
main), la consommation était de
842. --Pour vérifier la consommation de quota,
Google Cloud Platform> Projet créé par l'acquisition de la clé API> Quelque chose comme" trois "dans le coin supérieur gauche> IAM et gestion> Attribution> Limiter les services à YouTube Data API v3--Peut être obtenu avant et après la diffusion ――Si la fréquence d'acquisition est trop basse, y a-t-il une omission? ―― Vous trouverez ci-dessous le code pour enregistrer toutes les discussions, y compris Spacha. Réécrire en fonction de l'application. --Spacha est
msg = 'Montant du nom d'utilisateur:" Message "'`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}
--Définissez pageToken
sur None
pour la première foisnextPageToken
pour pageToken
while True
jusqu'à ce que vous lanciez une erreur (jusqu'à ctrl + C).record_chat.py
import time
import requests
import json
#Clé API YouTube obtenue à l'avance
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 #Fois
take_time = slp_time / 60 * iter_times
print('{}Prévu pour se terminer dans quelques minutes'.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('{}Enregistrez le champ de discussion de.'.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