[PYTHON] Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert

Einführung

Freut mich, dich kennenzulernen. Mein Name ist Shun und ich arbeite hart als Ingenieur. Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert, daher möchte ich den Prozess schreiben. Dieses Mal verwenden wir die YouTube-Daten-API, um die Videoinformationen des YouTube-Kanals abzurufen.

Umgebung

Daten vorzubereiten

--YouTube Channel ID

Zu erfassende Daten

Methode

Registrieren Sie zunächst Ihre Anwendung bei Google, damit Sie die YouTube-Daten-API verwenden können. Weitere Informationen finden Sie unter hier. (Übrigens können Sie die API auch von dieser Seite aus ausprobieren.) Verwenden Sie den API-Schlüssel, den Sie hier erhalten haben, um Videoinformationen abzurufen.

Der Akquisitionsfluss sieht so aus.

  1. Rufen Sie die Video-ID des Kanals aus der Kanal-ID ab
  2. Holen Sie sich Videoinformationen von der Video-ID

1. Rufen Sie die Video-ID des Kanals aus der Kanal-ID ab

Sie können die Kanal-ID von der URL abrufen, wenn Sie die Startseite des Kanals geöffnet haben, den Sie kennen möchten. Zum Beispiel bei meinem Favoriten Akua Minato https://www.youtube.com/channel/UC1opHUrw8rvnsadT-iGp7Cg Da dies die URL des YouTube-Kanals ist, lautet die Kanal-ID ** UC1opHUrw8rvnsadT-iGp7Cg **.

Verwenden Sie diese Kanal-ID, um eine Liste der Videos zu erhalten.

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

Geben Sie zusätzlich zur Kanal-ID die folgenden Werte als Parameter an.

2. Holen Sie sich Videoinformationen von der Video-ID

Verwenden Sie die erfasste Video-ID, um detaillierte Informationen für jedes Video abzurufen.

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

Zusätzlich zur neuen Angabe der Video-ID als ID gibt der Parameter teilweise Snippet und liveStreamingDetails an. Damit können Sie zusätzlich zu den Basisinformationen des Videos auch die Informationen zum Zeitpunkt der Live-Verbreitung abrufen.

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)

Da die Liste der zuerst erfassten Video-IDs die IDs der Wiedergabeliste enthält, werden vor dem Erfassen von Videoinformationen nur diejenigen mit videoId erfasst.

Der Code, der diese zusammen ausführt, ist ↓.

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'])

Geben Sie zuerst das Datum und die Uhrzeit an, um es abzurufen, und fahren Sie dann fort, es abzurufen, solange nextPageToken vorhanden ist. Im Fall von Minato Akua Channel wurde der Kanal am 31. Juli 2018 eingerichtet. Wenn Sie also zu einem älteren Zeitpunkt mit dem Erwerb beginnen, erhalten Sie Informationen zu allen Videos. Ich kann es schaffen

Eigentlich werde ich den Kalender danach weiter aktualisieren, aber das wird eine weitere Gelegenheit sein ...

Recommended Posts

Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert (Google Kalender Edition).
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Ich habe ein Tool zum automatischen Sichern der Metadaten der Salesforce-Organisation erstellt
[Python] Ich habe einen Web-Scraping-Code erstellt, der automatisch den Nachrichtentitel und die URL von Nihon Keizai Shimbun erfasst.
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
[Python / C] Ich habe versucht, ein Gerät zu erstellen, das den Bildschirm eines PCs drahtlos aus der Ferne scrollt.
Ein Werkzeug, das die Gacha von Soshage automatisch dreht
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Ich möchte einen Slack-Bot, der das Gehalt eines Teilzeitjobs aus dem Zeitplan von Google Kalender berechnet und anzeigt!
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Ich habe die X-Means-Methode untersucht, mit der die Anzahl der Cluster automatisch geschätzt wird
Ich habe den Befehl gegeben, einen farbenfrohen Kalender im Terminal anzuzeigen
[Kaggle] Ich habe mit dem Titanic-Tutorial eine Sammlung von Problemen erstellt
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe einen Korpusleser geschrieben, der die Ergebnisse der MeCab-Analyse liest
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Ich habe GAN mit Keras gemacht, also habe ich ein Video des Lernprozesses gemacht.
Ich habe eine Bibliothek konoha gemacht, die den Tokenizer auf ein schönes Gefühl umstellt
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe einen Fehler beim Abrufen der Hierarchie mit MultiIndex von Pandas gemacht
[Python] Hinweis: Selbst erstellte Funktion zum Ermitteln des Bereichs der Normalverteilung
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich habe einen SlackBot erstellt, der mich jede Woche über Informationen zum AtCoder-Wettbewerb informiert
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe einen Linebot erstellt, der mich über nahegelegene Evakuierungsstellen auf AWS informiert
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
[Bot dekodieren] Ich habe versucht, einen Bot zu erstellen, der mir den Rassenwert von Pokemon angibt
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Ich habe ein Docker-Image erstellt, das RSS liest und automatisch regelmäßig twittert, und es veröffentlicht.
[Python] Ein Programm, das die Anzahl der Täler zählt
Ich habe ein Schwellenwertänderungsfeld für Peppers Dialog erstellt
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Schritte zur Berechnung der Wahrscheinlichkeit einer Normalverteilung
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Erzeugen Sie diese Form des Bodens einer Haustierflasche
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Clustering G-bedeutet, dass die Anzahl der Cluster automatisch bestimmt wird
〇✕ Ich habe ein Spiel gemacht
Ich habe eine Twitter-App erstellt, die das Bild eines bestimmten Charakters auf der Twitter-Timeline durch Pytorch-Transfer-Lernen identifiziert und speichert
Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
Ich habe ein Tool erstellt, um die Antwortlinks von OpenAI Gym auf einmal zu erhalten
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt