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 estmsg = '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 pageTokenwhile 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