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.
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.
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.
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