本業マーケティング、趣味プログラミングのKenです。
私は作業中にライブカメラをスクリーンに流しておくのが好きで、よくYoutubeで猫とかリスのライブ映像や海外の街を流しています。
気分によって見る動画を変えているのですが、Youtubeで調べてもアルゴリズムのせいで似た動画しか表示されません。そこでYoutubeのAPIを使って、ライブ配信をしている動画をリスト化してやろうと思い立ちました。
YouTube APIでできること
Youtube APIでは以下の情報を取得できます。
- 動画情報:タイトル、説明、再生回数、評価数、コメント数、サムネイル画像、公開日、タグ、ライセンス情報など。
- チャンネル情報:チャンネル名、説明、登録者数、作成した再生リスト、バナー画像など。
- 再生リスト情報:再生リストのタイトル、説明、動画のリスト、各動画の詳細情報など。
- コメント情報:動画やチャンネルに投稿されたコメントの内容、投稿者情報、コメントの返信など。
- 検索結果:特定のキーワードや条件に基づく動画、チャンネル、再生リストの検索結果。
今回は動画IDからタイトル、説明、サムネ画像、タグを取得していきたいと思います。
Youtube APIキーを取得
まずはAPIキーとかを取得します。細かいことを書くのはめんどくさいので、以下ChatGPTにまとめてもらいました。
1. Google Cloud Consoleでプロジェクトを作成
Google Cloud Consoleにアクセスし、Googleアカウントでログインします。
左上のメニューから「プロジェクトを選択」をクリックして新しいプロジェクトを作成します。
2. YouTube Data APIを有効化
プロジェクトを選択した状態で、左側の「APIとサービス」→「ライブラリ」を選択します。
「YouTube Data API v3」を検索し、選択して「有効にする」をクリックします。
3. APIキーの取得
「APIとサービス」→「認証情報」をクリックします。
「認証情報を作成」ボタンをクリックして「APIキー」を選択します。生成されたAPIキーをコピーしておきます(このキーはAPIリクエストで使用します)。
コーディング
YOUTUBE_API_KEY = 'ここにAPIキー'
VIDEO_ID = 'OmWt0efvmNQ'
さっきコピーしたAPIキーを「YOUTUBE_API_KEY」にいれておきます。あと情報を取得したい動画のIDをVIDEO_IDにいれます。
#YouTube APIクライアントの設定
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)
# 動画情報を取得用関数
def get_video_info(youtube, video_id):
request = youtube.videos().list(part="snippet,recordingDetails", id=video_id)
response = request.execute()
if "items" in response and response["items"]:
video_info = response["items"][0]
title = video_info["snippet"]["title"]
description = video_info["snippet"]["description"]
thumbnail_url = video_info["snippet"]["thumbnails"]["high"]["url"]
channel_name = video_info["snippet"]["channelTitle"]
channel_id = video_info["snippet"]["channelId"]
channel_url = f"https://www.youtube.com/channel/{channel_id}" # チャンネルリンク生成
category_name = get_category_name(video_info["snippet"]["categoryId"])
tags = video_info["snippet"].get("tags", [])
location = video_info.get("recordingDetails", {}).get("location", None)
# 位置情報から場所の名前を取得
if location:
location_name = get_location_name(location["latitude"], location["longitude"])
else:
location_name = "位置情報なし"
update_google_sheet(video_id, channel_name, channel_url, category_name, tags, location_name, thumbnail_url)
snippet
にはタイトル、説明、タグ、チャンネル情報などの基本情報が含まれます。recordingDetails
には位置情報が含まれます。- responseの中身は
title
: 動画のタイトルdescription
: 動画の説明thumbnail_url
: 動画のサムネイル画像URL(高解像度版)channel_name
: 動画をアップロードしたチャンネル名channel_id
: チャンネルのIDchannel_url
: チャンネルリンクを生成するためにchannel_id
を利用し、チャンネルURLを構築しますcategory_name
: 利用してカテゴリー名を取得tags
: 動画に関連付けられたタグのリスト。タグが存在しない場合は空のリストlocation
:recordingDetails
に含まれる位置情報(緯度と経度)。位置情報がない場合はNone
。
- update_google_sheet(…)で取得情報をスプレッドシートに追記
自分用メモすぎで、全く優しくない説明ですみません。わからない点があれば、お気軽にコメントください!お手伝いします!