リバース・エンジニアリング

Flultterとテックブログと時々iOS

PythonでYoutube Data APIを使ってYoutubeのチャンネル動画一覧を取得する

PythonYoutube Data APIを使ってYoutubeのチャンネル動画一覧を取得する

Youtubeの特定チャンネルの動画一覧が欲しかったのでPythonスクリプトを作ってみました。
自分へのメモ用です。

使うためにはGoogle developer Console から APIキーを取得する必要があります。

必要なもの

  • Google Developer Console のAPIキー (YouTubeが使えるもの)
  • 取得したい動画のチャンネルID

APIキーは次の動画を参考にすると作り方が分かります。


Python YouTube API Tutorial: Getting Started - Creating an API Key and Querying the API

スクリプト

こちらがPython スクリプトになります。

import pandas as pd
import requests
import time
import os

####################
# API_KEY ('xxxyyyzzz'のようにAPIキーを挿入します)
API_KEY = ''

# 検索したいチャンネルのID ('aaabbbcccddd'のようにチャンネルIDを挿入します)
CHANNEL_ID = ''

# 作成するファイル名 (ディレクトリに保存するファイル名)
VIDEO_CSV_NAME = 'videos.csv'
####################

base_url = 'https://www.googleapis.com/youtube/v3'
url = base_url + '/search?key=%s&channelId=%s&part=snippet,id&order=date&maxResults=50'
infos = []

while True:
    time.sleep(30)
    response = requests.get(url % (API_KEY, CHANNEL_ID))
    if response.status_code != 200:
        print('エラーが発生しました')
        break
    result = response.json()
    infos.extend([
        [item['id']['videoId'],
        item['snippet']['title'],
        item['snippet']['description'],
        item['snippet']['publishedAt']]
        for item in result['items'] if item['id']['kind'] == 'youtube#video'
    ])

    if 'nextPageToken' in result.keys():
        if 'pageToken' in url:
            url = url.split('&pageToken')[0]
        url += f'&pageToken={result["nextPageToken"]}'
    else:
        print('正常終了です')
        break

videos = pd.DataFrame(
    infos, columns=[
        'videoId',
        'title',
        'description',
        'publishedAt'
        ])
videos.to_csv(VIDEO_CSV_NAME, index=None)

これでターミナルなどから叩くとcsvファイルで特定チャンネルの動画一覧をcsvファイル形式で取得できます。

videos で取得できるパラメータ群

developers.google.com

パラメータ 内容
snippet.title 動画のタイトル。
snippet.description 動画の説明。
snippet.thumbnails 動画に関連付けられているサムネイル画像のマップ。
snippet.publishedAt 動画のアップロード日時。

動画のサムネイル画像の取得

上記のAPIからでもサムネイルを取得できますが、videoIdがわかっていれば別の方法でも取得できます。

www.it-swarm.dev

この記事を参考にすると

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

これで<insert-youtube-video-id-here>にvideoIdを挿入すればサムネイル画像にアクセスできます。

取得できたデータをFirebase などのDBに保存するとYoutube関連のアプリが作れそうですね。