Youtubeでお気に入りのチャンネルから、最新投稿を取得する
私はよくYoutubeでAI関係の情報を収集していますが、10分くらいの動画でも複数あるとなかなか時間を取れなかったりします。
だいたいのYoutubeは10分で500文字くらいですので、文章で読んだら数分で要点を掴めますし、生成AIに要約をお願いすればさらに短時間で記事を流し読みすることもできます。
今回のターゲットはイチケンさん。
電子工作をしている人なら知らない人はいないでしょう
https://www.youtube.com/@ICHIKEN1/videos
Youtubeライブラリを使った
APIキーの取得
Google cloudでAPIキーを取得します。
必要なAPI(ライブラリ)は「YouTube Data API v3」です
APIキー自体は他のAPIにも使えてしまうので、安全のためにもyoutube data api v3だけ有効にしておいたほうがいいでしょう
ライブラリのロード
ここからpythonで書いていきます。
(python3.13を使っています)
古い記事ではfrom apiclient.discovery import build
という形でインポートしていますが、
これが執筆時点での新しい書き方です
from googleapiclient.discovery import build, Resource
from googleapiclient.errors import HttpError
youtubeとしてビルド
# API情報
DEVELOPER_KEY = '*******************'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=DEVELOPER_KEY
)
チャンネルIDを検索
request = youtube.search().list(
part='id',
q='ICHIKEN1', # チャンネル名を指定
type='channel' # チャンネルを検索
)
response = request.execute()
if response['items']:
channel_id = response['items'][0]['id']['channelId']
print(f'チャンネルID: {channel_id}')
else:
print('チャンネルが見つかりませんでした')
イチケンさんのチャンネルIDは「UCGhudK3AIG152KrfURCSb2Q」でした
チャンネルに対して検索
request = youtube.search().list(
part='snippet', # snippetを指定することで、動画のタイトルや説明文などの情報を取得できる
channelId='UCGhudK3AIG152KrfURCSb2Q', # チャンネルIDを指定
order='date', # 日付順に並び替え
type='video', # 動画を検索
maxResults=1 # 最新の動画を1件取得
)
response = request.execute()
if response['items']:
latest_video = response['items'][0]
title = latest_video['snippet']['title']
video_id = latest_video['id']['videoId']
url = f'https://www.youtube.com/watch?v={video_id}'
print(f'最新動画のタイトル: {title}')
print(f'最新動画のURL: {url}')
else:
print('動画が見つかりませんでした')
パラメーターについて
YouTube Data API v3 の list() メソッドは、リソースのリストを取得するために使用されます。このメソッドの引数には、検索条件や取得する情報を指定するための様々なパラメータがあります。
公式ドキュメント(https://developers.google.com/youtube/v3/docs/search/list)によると、search.list() メソッドで使用できる主なパラメータは以下の通りです。
- part: 取得するリソースのパーツを指定します。例えば、snippet を指定すると、動画のタイトルや説明文などの情報を取得できます。複数のパーツをカンマ区切りで指定することも可能です。
- q: 検索クエリを指定します。キーワードやフレーズを入力することで、関連する動画を検索できます。
- channelId: チャンネルIDを指定することで、特定のチャンネルの動画を検索できます。
- type: 検索するリソースのタイプを指定します。例えば、video を指定すると動画を検索し、channel を指定するとチャンネルを検索します。
- order: 検索結果の並び順を指定します。例えば、date を指定すると日付順に並び替え、viewCount を指定すると視聴回数順に並び替えます。
- maxResults: 取得する検索結果の最大数を指定します。
- pageToken: 検索結果が複数ページにわたる場合に、次のページを取得するためのトークンを指定します。
これらのパラメータを組み合わせることで、様々な検索条件を指定できます。
Youtubeの内容をロードする
langchain_communityのYoutubeloaderを使います
from langchain_community.document_loaders import YoutubeLoader
loader = YoutubeLoader.from_youtube_url(
url, add_video_info=False, language=["ja"]
)
docs = loader.load()
print(docs)
add_video_infoはFalseにしておきましょう。
これをTrueにするとpytubeを利用してビデオ情報を取得しようとするのですが、ライブラリの互換性でエラーが出ます。
ビデオ情報については上述のyoutube Data API v3で取得したほうがいいです
参考
Discussion