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.
--YouTube Channel ID
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.
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.
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