Qiitaへの初投稿です。
基本的に私の備忘録も兼ねて使う予定です。
まだPython勉強中なのでコードに関して突っ込みなどあればご指摘お願いします。
また、著作権などに関しては私的使用の範囲であれば可能という認識ですが、何か問題があった場合は指摘してください。
下準備
まずは、https://console.cloud.google.com/にアクセスしてプロジェクト作成、ライブラリからYoutube Data APIを有効化、認証情報(APIKey)の追加。
次に、Youtube Data APIを使うにあたって必要になるライブラリのインストール、動画の保存に当たって必要になるYoutube_DLのインストール。
pip install google-api-python-client
pip install youtube-dl
コード
インストールできたら、まずライブラリのインポートと各変数への代入です。
from apiclient import discovery
import youtube_dl
DEVELOPER_KEY = "" # ここにAPIKey
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [
{'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192'},
{'key': 'FFmpegMetadata'},
],
} # youtube-dlでダウンロードする動画を音楽に変換する
もし音楽ではなく動画をダウンロードしたい場合はytdl_optsを空にすればOKです。
次に、チャンネルで最も多く再生されている動画のURLを0-10まで取得。
def youtube_search(channelId):
videos = [] # URLを入れるリスト
youtube = discovery.build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
developerKey=DEVELOPER_KEY)
search_response = youtube.search().list(
part="snippet",
channelId= channelId,
maxResults=10,
order="viewCount",
).execute() # APIでチャンネルを指定したうえで再生回数順に10件動画検索をかける
for search_result in search_response.get("items", []):
if search_result["id"]["kind"] == "youtube#video":
print("https://www.youtube.com/watch?v=" + search_result['id']['videoId'])
videos.append(search_result["id"]["videoId"]) # videosにURL追加
return videos
ちなみに検索数はmaxResults=0-50まで任意で指定できます。
最後にリストに入っているURLの動画すべてをダウンロード
def download_video(video_list):
for i, videoId in enumerate(video_list): # インデックス番号と要素を同時に回す
# ydl_opts['outtmpl'] = "music{}".format(str(i)) + '.%(ext)s' # もし再生回数順ををわかりやすくしたい場合はここの#を外せばmusic0-10.mp3(mp4)としてダウンロードできます
ydl = youtube_dl.YoutubeDL(ydl_opts)
ydl.extract_info("https://www.youtube.com/watch?v={}".format(videoId), download=True)
# ytdl_opts=...の部分はファイル名の形式を表しています。
#を消せばmusic[0-10].mp3(mp4)の形式でダウンロードできます。
最後
そのままコード実行して使える形
from apiclient import discovery
import youtube_dl
DEVELOPER_KEY = "YOUR_API_KEY" # ここにAPIKeyを入れてください
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [
{'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192'},
{'key': 'FFmpegMetadata'},
],
} # youtube-dlでダウンロードする動画を音楽に変換する
def youtube_search(channelId):
videos = [] # URLを入れるリスト
youtube = discovery.build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
developerKey=DEVELOPER_KEY)
search_response = youtube.search().list(
part="snippet",
channelId= channelId,
maxResults=10,
order="viewCount",
).execute() # APIでチャンネルを指定したうえで再生回数順に10件動画検索をかける
for search_result in search_response.get("items", []):
if search_result["id"]["kind"] == "youtube#video":
print("https://www.youtube.com/watch?v=" + search_result['id']['videoId'])
videos.append(search_result["id"]["videoId"]) # videosにURL追加
return videos
def download_video(video_list):
for i, videoId in enumerate(video_list): # インデックス番号と要素を同時に回す
# ydl_opts['outtmpl'] = "music{}".format(str(i)) + '.%(ext)s' # もし各動画の再生回数順をわかりやすくしたい場合はここの#を外せばmusic0-10.mp3としてダウンロードできます
ydl = youtube_dl.YoutubeDL(ydl_opts)
ydl.extract_info("https://www.youtube.com/watch?v={}".format(videoId), download=True)
if __name__ == '__main__':
channel = input("チャンネルIDを入力してください:")
videos = youtube_search(channel)
download_video(videos)
print('ダウンロードが完了しました。')
この記事はここまでです。ありがとうございました。