MYJLab Advent Calendar 2020 6日目の記事です
背景
YouTubeを視聴していると、動画内で流れているBGMをどうしても知りたくなる時があります。そんな時にコメント蘭を覗くと、BGMを教えてくれる神コメントがあったりなかったり。
コメントを全部見るのは大変なので、神コメント探しを自動化したい。
準備
実行環境
Python 3.7.9
YouTube Data API
コメントの取得にはYouTube Data APIのCommentThreadsリソースを使います。APIの利用には、APIキーが必要です。APIキーの取得についてはこちら。
実装
コメントにBGMの情報があるかどうかの判定
コメントに「BGM」「曲」「音楽」のいずれかの単語が含まれていれば、そのコメントもしくはコメントへの返信にBGMの情報があるものとして扱います。
def has_bgm_info(comment):
if re.search(r'[Bb][Gg][Mm]', comment) != None:
return True
if '曲' in comment:
return True
if '音楽' in comment:
return True
return False
コード全体
標準入力から動画URLを受け取り、BGMの情報を含むと思われるコメント及びコメントへの返信を標準出力へ出力します。
find_bgm.py
import requests
import re
def get_comment(video_id, page_token = ''):
request_url = 'https://www.googleapis.com/youtube/v3/commentThreads'
param = {
'key': 'your api key',
'videoId': video_id,
'part': 'replies, snippet',
'maxResults': '100',
}
if page_token:
param['pageToken'] = page_token
req = requests.get(request_url, params=param)
return req.json()
def has_bgm_info(comment):
if re.search(r'[Bb][Gg][Mm]', comment) != None:
return True
if '曲' in comment:
return True
if '音楽' in comment:
return True
return False
video_id = ''
while True:
print('urlを入力:', end='')
url = input()
url_pattern = r'https://www.youtube.com/watch\?v=[0-9A-Za-z-_]{11}'
if re.match(url_pattern, url) != None:
video_id = re.search(r'[0-9A-Za-z-_]{11}', url).group()
break
print('urlが間違っています')
page_token = ''
while True:
req = get_comment(video_id, page_token)
for comment_thread in req['items']:
comment = comment_thread['snippet']['topLevelComment']['snippet']['textOriginal']
if has_bgm_info(comment) and 'replies' in comment_thread and 'comments' in comment_thread['replies']:
print('') # 見やすくするために改行を入れる
print(comment)
for replies_thread in comment_thread['replies']['comments'][::-1]: # replyを時系列順に並べるため逆順で取り出す
reply_comment = '┣━' + replies_thread['snippet']['textOriginal']
print(reply_comment)
if 'nextPageToken' in req:
page_token = req['nextPageToken']
else:
break
結果
作成したpythonファイルを実行して、標準入力に動画URLを入力します。
$ python find_bgm.py
urlを入力:https://www.youtube.com/watch?v=wMS0-1IEYuU
後ろで流れてるBGMわかる方いますか?
┣━becoさんの「深海に生きる」ですよ〜
┣━@i y ありがとうございます…!
┣━いえいえ!
できた!