[PYTHON] Obtenez des champs de chat en direct YouTube en temps réel avec l'API

Mise en garde

Conditions d'utilisation de YouTube Utilisez le code ci-dessous à vos propres risques.

Obtenez en temps réel avec l'API YouTube

Aperçu

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

couler

Code source

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

Obtenez des champs de chat en direct YouTube en temps réel avec l'API
Obtenez une sortie standard en temps réel avec le sous-processus Python
Essayez de convertir des vidéos en temps réel avec OpenCV
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Obtenez des commentaires YouTube en Python
[Go language] Comment obtenir l'entrée du terminal en temps réel
Obtenez des données Youtube avec python
Obtenir des informations avec l'API Zabbix
Écrivez des graphiques en temps réel avec Matplotlib sur le notebook Jupyter
Obtenez un classement avec l'API Rakuten
Dessinez un flux optique en temps réel avec OpenCV (méthode Shi-Tomasi, méthode Lucas-Kanade)
Obtenez un temps de réaction négatif avec psychopy.event.getKeys ()
Obtenez des avis avec l'API googlemap de python
API GraphQL utilisant graphene_django dans Django
Démarrez avec Python avec Blender
Comment obtenir la différence de date et d'heure en secondes avec Python
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python
Obtenez des données supplémentaires vers LDAP avec python
Obtenir la date et l'heure au format spécifié
Recevoir des e-mails à l'aide de l'API Gmail en Java
Obtenez les données de l'API Google Fit en Python
Commençons avec TopCoder en Python (version 2020)
Obtenez des vacances avec l'API Google Agenda
[Python] Obtenez des informations sur le package Python avec l'API PyPI
Obtenez des informations sur la monnaie virtuelle Coincheck avec l'API ♪
Visualisez les informations du capteur d'accélération de la carte micro-ordinateur en temps réel avec mbed + Python
Obtenez des champs de chat en direct YouTube en temps réel avec l'API
[Python] Afficher le temps écoulé en heures, minutes et secondes (00:00:00)
J'ai affiché le chat de YouTube Live et essayé de jouer
Comment générer un code QR et un code à barres en Python et le lire normalement ou en temps réel avec OpenCV