やりたいこと
YouTubeを視聴していたら、把握しきれないほどに登録チャンネル数が増えてしまっていて、管理出来なくなってしまいました。
なので、まずはその第一歩として、最近活動していないチャンネルを登録チャンネルから抽出し、しばらく活動していないチャンネルを登録削除させたい。
今回の目標
今回はYouTube Data API V3を使えばプログラマブルにYouTubeのデータにアクセス出来るらしいので、YouTube Data API V3の使い方を学びつつ、登録チャンネルを抽出するところまでやっていきます。
開発&実行環境
OS:Windows 11 の WSL2
言語:Python3
事前準備
1.Google Cloud Consoleにアクセスし、YouTubeにアクセスするための情報を取得する。
こちらの記事を参考にさせて頂きました。
https://qiita.com/nbayashi/items/bde26cd04f08de21d552
https://qiita.com/mnoguchi/items/7d7795444afb9d9dafa8
対象→テストユーザーにYouTubeで使用しているアカウントを設定する。
2.Pythonコード
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from apiclient.discovery import build
from apiclient.errors import HttpError
import pandas as pd
# API情報
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/youtube.readonly']
def get_authenticated_service():
flow = InstalledAppFlow.from_client_secrets_file(
'client_secrets.json', SCOPES)
creds = flow.run_local_server(port=8080, open_browser=True)
return build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
credentials=creds
)
def get_subscribed_channels(youtube):
channels = []
request = youtube.subscriptions().list(
part='snippet',
mine='true',
maxResults=50,
)
while request:
response = request.execute()
for item in response['items']:
title = item['snippet']['title']
channel_id = item['snippet']['resourceId']['channelId']
print(f'{title}(Channel ID: {channel_id})')
channels.append((title, channel_id))
request = youtube.subscriptions().list_next(request, response)
return channels
youtube = get_authenticated_service()
subscribed_channels = get_subscribed_channels(youtube)
print(f'\n📺 登録チャンネル数:{len(subscribed_channels)}')
ダウンロードしたJSONはclient_secrets.jsonに名前を変更し、同じフォルダに設置する。
実行すると、コンソールにURIが出力されるので、コンソールのリンクからGoogleログイン画面にアクセスし、YouTubeアカウントでログインする。
実行結果
プログラムでやっていること解説
- Client_secrets.jsonの情報からGoogleアカウントのログイン画面に遷移し、ログインしたユーザーのアクセストークンを取得
- YouTubeにアクセスするためのクライアントを作成
- subscriptions().list()で登録したチャンネルのリストを取得するリクエストを作成
- リクエストを実行し、結果を取得
- リクエスト実行結果は一回につき最大50件まで取得できるので、list_next()で取得できていない残りを繰り返し取得する
ブログやってます。
https://taki-lab.site/bocci/