search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

【YouTube Data API】BGMを教えてくれる神コメントを探す

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 ありがとうございます…!
┣━いえいえ!

できた!

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0