[PYTHON] J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber

introduction

Ravi de vous rencontrer. Je m'appelle Shun et je travaille dur en tant qu'ingénieur. J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber, donc j'aimerais écrire le processus. Cette fois, nous utiliserons l'API de données YouTube pour obtenir les informations vidéo de la chaîne YouTube.

environnement

Données à préparer

Données à acquérir

Méthode

Tout d'abord, enregistrez votre application auprès de Google afin de pouvoir utiliser l'API de données YouTube. Pour plus de détails, consultez ici. (En passant, vous pouvez également essayer l'API à partir de cette page.) Utilisez la clé API que vous avez obtenue ici pour obtenir des informations vidéo.

Le flux d'acquisition ressemble à ceci.

  1. Obtenez l'ID vidéo de la chaîne à partir de l'ID de la chaîne
  2. Obtenir des informations vidéo à partir de l'identifiant vidéo

1. Obtenez l'ID vidéo de la chaîne à partir de l'ID de la chaîne

Vous pouvez obtenir l'ID de chaîne à partir de l'URL lorsque vous avez ouvert la page d'accueil de la chaîne que vous souhaitez connaître. Par exemple, dans le cas de mon préféré Akua Minato https://www.youtube.com/channel/UC1opHUrw8rvnsadT-iGp7Cg Puisqu'il s'agit de l'URL de la chaîne YouTube, l'ID de la chaîne sera ** UC1opHUrw8rvnsadT-iGp7Cg **.

Utilisez cet ID de chaîne pour obtenir une liste de vidéos.

import urllib.request
import json
import ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)

def get_video_info(channel_id, page_token=None, published_after=None):
    url = 'https://www.googleapis.com/youtube/v3/search'
    params = {
        'key': 'YOUTUBE_API_KEY',
        'part': 'id',
        'channelId': channel_id,
        'maxResults': 50,
        'order': 'date'
    }
    if page_token is not None:
        params['pageToken'] = page_token
    if published_after is not None:
        params['publishedAfter'] = published_after
    req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(params)))
    with urllib.request.urlopen(req, context=context) as res:
        body = json.load(res)
        return body

En plus de l'ID de canal, spécifiez les valeurs suivantes comme paramètres.

2. Obtenir des informations vidéo à partir de l'identifiant vidéo

Utilisez l'ID vidéo acquis pour obtenir des informations détaillées sur chaque vidéo.

def get_video_details(video_ids):
    url = 'https://www.googleapis.com/youtube/v3/videos'
    params = {
        'key': 'YOUTUBE_API_KEY',
        'part': 'snippet, liveStreamingDetails',
        'id': video_ids
    }

    req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(params)))
    with urllib.request.urlopen(req, context=context) as res:
        body = json.load(res)
        return body

Outre la nouvelle spécification de l'ID vidéo en tant qu'ID, le paramètre spécifie en partie l'extrait de code et liveStreamingDetails. Avec cela, en plus des informations de base de la vidéo, vous pouvez également obtenir les informations au moment de la distribution en direct.

def get_videos(items):
    video_ids = ''
    for item in items:
        if 'videoId' in item['id']:
            video_ids += item['id']['videoId']
            video_ids += ', '
    video_details = get_video_details(video_ids[:-2])
    for video_detail in video_details['items']:
        print(video_detail)

Étant donné que la liste des ID vidéo acquise en premier comprend les ID de la liste de lecture, seuls ceux avec videoId sont collectés avant d'acquérir les informations vidéo.

Le code qui les exécute ensemble est ↓.

video_info = get_video_info(channel_id='CHANNEL_ID', published_after='DATETIME')
get_videos(video_info['items'])
while 'nextPageToken' in video_info:
    page_token = video_info['nextPageToken']
    video_info = get_video_info(channel_id='CHANNEL_ID', page_token=page_token)
    get_videos(video_info['items'])

Tout d'abord, spécifiez la date et l'heure de l'obtenir, puis continuez à l'obtenir tant qu'il y a nextPageToken. Dans le cas de Minato Akua Channel, la chaîne a été créée le 31 juillet 2018, donc si vous commencez à acquérir à une date et une heure plus anciennes, vous obtiendrez des informations sur toutes les vidéos. Je peux le faire.

En fait, je continuerai de mettre à jour le calendrier après cela, mais ce sera une autre opportunité ...

Recommended Posts

J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber (édition Google Calendar)
J'ai fait un bot mou qui m'informe de la température
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
[Python] J'ai créé un code de scraping web qui acquiert automatiquement le titre de l'actualité et l'URL de Nihon Keizai Shimbun.
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)
[Python / C] J'ai créé un appareil qui fait défiler sans fil l'écran d'un PC à distance.
Un outil qui transforme automatiquement le gacha de Soshage
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
Je veux un bot Slack qui calcule et me dit le salaire d'un emploi à temps partiel à partir du calendrier de Google Agenda!
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai étudié la méthode X-means qui estime automatiquement le nombre de clusters
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
J'ai écrit un lecteur de corpus qui lit les résultats de l'analyse MeCab
L'histoire du développement d'une application WEB qui génère automatiquement des copies de capture [MeCab]
J'ai fait une simple minuterie qui peut être démarrée depuis le terminal
J'ai fait GAN avec Keras, donc j'ai fait une vidéo du processus d'apprentissage.
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
[Python] Note: Fonction auto-conçue pour trouver la zone de distribution normale
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai créé un SlackBot qui m'informe chaque semaine des informations sur le concours AtCoder
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
J'ai créé un Linebot qui m'informe des sites d'évacuation à proximité sur AWS
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
[Discode Bot] J'ai essayé de créer un Bot qui me dit la valeur de race de Pokemon
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
L'histoire de la création d'un Line Bot qui nous raconte le calendrier de la programmation du concours
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
[Python] Un programme qui compte le nombre de vallées
J'ai créé une boîte de changement de seuil pour Pepper's Dialog
Créez un BOT qui raccourcit l'URL Discord
J'ai créé une VM qui exécute OpenCV pour Python
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
Étapes pour calculer la probabilité d'une distribution normale
J'ai essayé de visualiser les informations spacha de VTuber
Générer cette forme du fond d'une bouteille pour animaux de compagnie
Un mémo que j'ai touché au magasin de données avec python
J'ai fait une commande pour marquer le clip de la table
Une histoire qui a analysé la livraison de Nico Nama.
[Python] Un programme qui compare les positions des kangourous.
Clustering G-means qui détermine automatiquement le nombre de clusters
〇✕ J'ai fait un jeu
J'ai créé une application Twitter qui identifie et enregistre l'image d'un personnage spécifique sur la chronologie de Twitter par pytorch transfer learning
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
J'ai créé un outil pour obtenir les liens de réponse d'OpenAI Gym en même temps
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique