chinda_fall_desu’s diary

竹内豊の日記

ヒューマンコンピューターインターフェースをもっと知りたいなー

pythonでYoutube動画のタイトルと概要欄を取得

YouTube Data API の概要  |  Google Developers
Youtube Data APIを使えば、Youtubeから様々な情報を取得できる。
以下にその例を示した。


Youtubeの動画のidを使って、その動画のタイトルを得る。
ソースコード

import requests
id='z9WHIkedhz8'
apikey='(Youtube Data api のキー)'
url = 'https://www.googleapis.com/youtube/v3/videos?id='+id+'&key='+apikey+'&part=snippet,contentDetails,statistics,status'

response = requests.get(url)
# print(response.json())
print("https://www.youtube.com/watch?v="+response.json()['items'][0]['id'])
print(response.json()['items'][0]['snippet']['title'])

(実行結果)

> python .\title.py
https://www.youtube.com/watch?v=z9WHIkedhz8
【改名はまさかの…】結局誰が一番球技上手いの? 第1回球技王!【後編】


②同様にして概要欄の文章を取得することもできる。
ソースコード

print(response.json()['items'][0]['snippet']['description'])

(実行結果)

> python .\title.py
撮影協力:岡崎市
https://fc.okazaki-kanko.jp/news/94

今回の企画では「球技」とひとくくりにしていろいろなスポーツで遊びましたが、よく考えてみればなんか「球」を使う競技多いですよね。流行ってるんですか?

「スポーツなんだから球使うだろ」「球じゃないとくちゃくちゃになるだろ」とお思いかもしれませんが、本当にそうですか?ラグビーやアメフトは意味わかんない形のボール使ってますし、バドミントンやインディアカも意味わかんない羽根使ってます。でも別にスポーツとして成立してますよね?むしろその形状ならではの特徴的な動きが生まれていていい感じです。
:
:
:
ゆめまる→https://twitter.com/TO_yumemarucas
虫眼鏡→https://twitter.com/TO_ZAWAKUN


③チャンネルidを使って、そのチャンネルの動画のタイトルを得る。
ソースコード

import requests
channelid='UCutJqz56653xV2wwSvut_hQ'
apikey='(Youtube Data api のキー)'
url = 'https://www.googleapis.com/youtube/v3/search?key='+apikey+'&channelId='+channelid+'&part=snippet,id&order=date&maxResults=1'

response = requests.get(url)
# print(response.json())
print("https://www.youtube.com/watch?v="+response.json()['items'][0]['id']['videoId'])
print(response.json()['items'][0]['snippet']['title'])

urlのchannelIdでチャンネルを指定、maxResultsで出力する結果の数を指定。
(実行結果)

> python .\channel.py
https://www.youtube.com/watch?v=vn50D0NEpg4
【りょうやん】みんなの「お前おかしいよ!」っていう5対1を見つけ合おう!!!

そのチャンネルの最新の動画が表示される。


④maxResultsを変えて、タイトルの一覧を表示する。
ソースコード

import requests
channelid='UCutJqz56653xV2wwSvut_hQ'
apikey='(Youtube Data api のキー)'
url = 'https://www.googleapis.com/youtube/v3/search?key='+apikey+'&channelId='+channelid+'&part=snippet,id&order=date&maxResults=50'
num=1

response = requests.get(url)
for i in range(50):
    print(str(num)+'. '+response.json()['items'][i]['snippet']['title'])
    num+=1

(実行結果)

> python .\channel.py
1. 【りょうやん】みんなの「お前おかしいよ!」っていう5対1を見つけ合おう!!!
2. 【改名はまさかの…】結局誰が一番球技上手いの? 第1回球技王!【後編】
3. 【最下位は改名】結局誰が一番球技上手いの? 第1回球技王!【前編】
4. 【46道府県旅行の旅!滋賀県編】〜黄昏の湖、道化師の鎮魂歌〜
:
:
46. 【鍛冶屋】それは無理だろって素材だけで刃物作り対決!!!
47. 【バカ商品】東海オンエアショッピングへようこそ!!!!
48. 1日全力で努力したらどれだけの数のYouTuberとコラボできるの!?
49. 野球の道具を野球以外に使って新競技を考えてみよう!
50. 【猛火】1000円以内で自分の財布を「防火仕様」にしよう!


⑤51以上の動画のタイトルを表示する。
maxResultsは50までしか指定できないので、複数回リクエストを送る。

import requests
channelid='UCutJqz56653xV2wwSvut_hQ'
apikey='(Youtube Data api のキー)'
url = 'https://www.googleapis.com/youtube/v3/search?key='+apikey+'&channelId='+channelid+'&part=snippet,id&order=date&maxResults=50'
num=1

response = requests.get(url)
for i in range(50):
    print(str(num)+'. '+response.json()['items'][i]['snippet']['title'])
    num+=1

for j in range(4):
    next=response.json()["nextPageToken"]
    nexturl=url+'&pageToken='+next
    response = requests.get(nexturl)
    for i in range(50):
        print(str(num)+'. '+response.json()['items'][i]['snippet']['title'])
        num+=1

(実行結果)

> python .\channel.py
1. 【りょうやん】みんなの「お前おかしいよ!」っていう5対1を見つけ合おう!!!
2. 【改名はまさかの…】結局誰が一番球技上手いの? 第1回球技王!【後編】
3. 【最下位は改名】結局誰が一番球技上手いの? 第1回球技王!【前編】
4. 【46道府県旅行の旅!滋賀県編】〜黄昏の湖、道化師の鎮魂歌〜
5. 【超難問】これなんの粉末でしょうクイズでブチギレ必至!!!
6. 【大ブランク】3回転んだら即終了スノボ!
7. 「こんな素材、編集でどうやって使うねん!!」→使います。
8. 【答えは実物で】第一回!現物大喜利!!!!!!
9. 【家庭事情×作品】自宅にある物だけでジオラマ作り対決!!!
10. 【失礼】プロフェッショナルのスゴ業をそんな事に使うな!!選手権
11. 【穴を制せ】負けたらピアスの対決!!穴王!!!
12. 【運×演技力】相談なしで5人の衣装を揃えて即興コントを演じきれ!
:
:
244. 【過去最悪】全味覚の世界最強を全て混ぜたら本当に死にかけた
245. 【5vs1クイズ対決】虫眼鏡ってさぁ、本当に頭いいの?
246. 【20種以上のフレーバー】俺たちがドクターペッパーを超えたドリンクを作ってやるよ!確かにそう意気込んでいた・・・     
247. 手作りバットで一番遠くにボール飛ばせた奴が勝ち対決!!
248. 【水溜りオンエア】おふざけなしのガチ文理ラップ対決!
249. 【サスペンス】リレー方式でドラマを作ったらまさかの結果に!?
250. 【二遊間】もう一度アライバコンビの超絶プレーが見たいんだ・・・【中日ドラゴンズ】


⑥実用例
chindafalldesu.hatenablog.com


参考
YouTube Data API の概要  |  Google Developers

YouTube Data api v3をPythonから使って特定のチャンネルの動画を取得する - Qiita


(間違い等あればコメントよろしくお願いいたします。)