YouTube Data API を使ってキーワード検索から動画のタイトル等の情報を取得する

YouTube Data API を使ってキーワード検索から動画のタイトル等の情報を取得します.

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

# YouTube Data APとは

YouTubeが提供しているAPIで、動画やチャンネル、再生リストに関わる情報を取得して、自分のWebサイトやアプリケーションで使用することができます。
公式のドキュメントが用意されているので、詳しくはこちらをご覧ください。
https://developers.google.com/youtube/v3/getting-started?hl=ja
引用元:YouTube Data API v3を使用して、YouTubeページと同じリストモジュールを作ってみた (opens new window)

YouTube が提供している API で、動画やチャンネルなど情報を取得して、自分の Web サイトやアプリケーションで使用することができます。
一日あたりのAPI使用量(クォータ)の上限が10000になっているので、注意して使用してください。
引用元:【Python】YouTube Data API を使って、いろんな情報を取得してみた! (opens new window)

# モジュールのインストール

!pip install google-api-python-client

# youtubeの情報を取得(1つの動画)

特定のキーワードで検索かけて,複数の動画の情報を取得します.

最終的には,DataFrameで出力します.

ここでは,以下の情報を取得します.

  • video_id
  • タイトル
  • クレイピング日時
  • 動画の公開日時
  • チャンネルタイトル
  • チャンネルID
  • 概要欄
  • サムネイル

# youtubeの情報をJson形式で取得

ここでは,特定キーワードを含むタイトルの動画を再生回数順でJson形式で取得します.

  • part:取得情報(snippet)
  • q:キーワード
  • order:ソートする項目
    • date:リソースを作成日の新しい順に並べます。
    • rating:リソースを評価の高い順に並べます。
    • relevance:リソースを検索クエリの関連性が高い順に並べます。このパラメータのデフォルト値です。
    • title:リソースをタイトルのアルファベット順に並べます。
    • videoCount:アップロード動画の番号順(降順)にチャンネルを並べます。
    • viewCount:リソースを再生回数の多い順に並べます。
  • type:検索対象のタイプ(channel・playlist・video)
import datetime
import pandas as pd
from apiclient.discovery import build

YOUTUBE_API_KEY = 'AIzaSyCjNsPtyaDBn0_mOW0DbxNhU9BxkCrqPAs'

youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

search_response = youtube.search().list(
    part='snippet',
    #検索したい文字列を指定
    q='ボードゲーム',
    #視聴回数が多い順に取得
    order='viewCount',
    type='video',
    ).execute()

# 1度に取得できる数
print('json_length:{}'.format(len(search_response['items'])))
# Json形式での情報
display(search_response['items'][0])
json_length:5



{'kind': 'youtube#searchResult',
 'etag': 'WPSsGnBDDsoYs6kDsziwxAeQx-0',
 'id': {'kind': 'youtube#video', 'videoId': 'ASusE5qjoAg'},
 'snippet': {'publishedAt': '2019-05-31T11:58:15Z',
  'channelId': 'UCutJqz56653xV2wwSvut_hQ',
  'title': '【目指せ商品化】文理対抗!ガチンコボードゲーム作り対決!',
  'description': '東海オンエアってもう「チャンネル登録してください」とか「高評価よろしくお願いします」とか言わなくなっちゃったけど、やっぱり言ったほうがいいってばよ? チャンネル登録 ...',
  'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/ASusE5qjoAg/default.jpg',
    'width': 120,
    'height': 90},
   'medium': {'url': 'https://i.ytimg.com/vi/ASusE5qjoAg/mqdefault.jpg',
    'width': 320,
    'height': 180},
   'high': {'url': 'https://i.ytimg.com/vi/ASusE5qjoAg/hqdefault.jpg',
    'width': 480,
    'height': 360}},
  'channelTitle': '東海オンエア',
  'liveBroadcastContent': 'none',
  'publishTime': '2019-05-31T11:58:15Z'}}

# youtubeの情報をDataFrame形式で取得

ここでは,特定キーワードを含むタイトルの動画を再生回数順でDataFrame形式で取得します.

また,任意の動画数分だけ取得できるようにもしています.

#numに入れた数字×5件の情報を取得
#その他のパラメーターはAPIから情報を取得するパラメータと同じ
# 動画のタイトル等を抜粋()
def get_video_info(part, q, order, type, num):
    dic_list = []
    search_response = youtube.search().list(part=part,q=q,order=order,type=type)
    output = youtube.search().list(part=part,q=q,order=order,type=type).execute()

    #一度に5件しか取得できないため何度も繰り返して実行
    for i in range(num):        
        dic_list = dic_list + output['items']
        search_response = youtube.search().list_next(search_response, output)
        output = search_response.execute()

    df = pd.DataFrame(dic_list)
    #各動画毎に一意のvideoIdを取得
    df1 = pd.DataFrame(list(df['id']))['videoId']
    #各動画毎に一意のvideoIdを取得必要な動画情報だけ取得
    df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description','thumbnails']]
    
    ddf = pd.concat([df1,df2], axis = 1)

    # 日本時刻に修正+9hours
    ddf['publishedAt'] = pd.to_datetime(ddf['publishedAt']) + datetime.timedelta(hours=9)

    return ddf
# 引数
part='snippet'
q = 'ボードゲーム'
order = 'date'
type = 'video'
num = 10 #Max:75/day->75*5=375本/day

# APIの取得
YOUTUBE_API_KEY = '************'
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

# 情報をデータフレーム形式で取得
df_youtube = get_video_info(part, q, order, type, num)
display(df_youtube.head())

# csvに出力
# df_info.to_csv('{}_scape.csv'.format(scrape_date), index=False)
videoId channelTitle publishedAt channelId title description thumbnails
0 4o2iX-BVcUQ アジトベル 恵比寿のボードゲームカフェ 2021-06-15T23:00:04Z UC3FA3Kz65VhfkuVQJWMyOAw 【おすすめボードゲーム】そこにそんなに⁉とんでもないところにこだわったボードゲーム3選【028】 製作者の愛を感じる♪ ▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△▽△ ☆アジトベル 恵比寿... {'default': {'url': 'https://i.ytimg.com/vi/4o...
1 e7JziFcyAyY hobby again 2021-06-15T18:57:41Z UC2lXqscjLeLc7F0H_4GKTug アナと雪の女王2 ストーリーボードゲーム 王国のひみつ ディズニー エポック社 買う前の確認... かうまえのかくにんようだよ. {'default': {'url': 'https://i.ytimg.com/vi/e7...
2 mCdnSLRLl38 LAP Youtube 2021-06-15T16:49:40Z UCB-rg55VHCylqGcJAiDBt1Q 【居酒屋eラジオ】おもしろボードゲーム&Knockout City 福岡女子 タレント3人がお酒を片手に #生配信 おしゃべりや #ゲーム やっちゃいます! 女... {'default': {'url': 'https://i.ytimg.com/vi/mC...
3 cDWKV7l9NbI きたこしちゃんねる 2021-06-15T14:54:52Z UCQD1KbDFa25mnfUnF6ldzXw 【 #ボドこし 74】カートグラファー【バーチャルゲームカフェ】ボードゲームで遊ぼうよ! 1人から100人で遊べる?!紙ペンゲーム カートグラファーのご紹介&ソロプレイ配信です。 当... {'default': {'url': 'https://i.ytimg.com/vi/cD...
4 1Lx9rBOS150 sangenya 2021-06-15T12:17:26Z UCUTG51hFXQavzdyAYmdN9XA ボードゲーム制作 作業配信 五稜郭 0.10.2 マイクはありません。 https://twitter.com/toshi_kadota Mu... {'default': {'url': 'https://i.ytimg.com/vi/1L...

# 参考サイト

【Python】YouTube Data API を使って、いろんな情報を取得してみた! (opens new window)

YouTube Data API v3を使用して、YouTubeページと同じリストモジュールを作ってみた (opens new window)

Youtube Data APIを使ってPythonでYoutubeデータを取得する (opens new window)

Search: list | YouTube Data API | Google Developers (opens new window)

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

Python + CycleGAN-VC2で音質変換を実装する

Python + CycleGAN-VC2で音質変換を実装する

Clubhouseの影響で音質系に興味を持ちました.本稿では,Python + CycleGAN-VC2で音質変換を実施します.

YouTube Data API を使ってキーワード検索から動画の再生回数等の情報を取得し,可視化も実装する

YouTube Data API を使ってキーワード検索から動画の再生回数等の情報を取得し,可視化も実装する

YouTube Data API を使ってキーワード検索から動画の再生回数等の情報を取得し,可視化も実装します.