LoginSignup
6
7

More than 3 years have passed since last update.

YouTube Data APIを使わずにチャンネルの最新ライブ配信IDを取得する方法

Last updated at Posted at 2020-05-17

注意

利用規約-YouTube
使い方によってYouTube利用規約に抵触する場合があるため、必ずYouTube利用規約を確認してください。

バックグランド

最近の個人アプリ開発中に出会った問題です。
YouTubeのライブ配信が日々活発している今、チャンネルIDを持ちながらそのチャンネルの最新ライブ配信の情報を取得したい場合がよくあります。しかし、YouTube Data APIを使って最新ライブ配信情報を取得しようとすると以下二つの問題があります。

  1. チャンネル情報丸ごと取得するチャンネル(channels)リソースからチャンネル最新動画取得しようとしてもライブ配信情報(ライブ配信中または公開予定の情報)が含まれない。(現在2020年5月時点)
  2. チャンネルIDを持ってsearchリソースを使うと、どうやら書き込み操作と同様に扱われるので他の情報取得操作リスト(list)の何十倍のクォータコスト(https://developers.google.com/youtube/v3/getting-started?hl=ja) が消費されます。

ライブ配信情報の有無を頻繁に取得・更新しないと意味ないので、searchリソースを使うと一日使えるクォータコストの割り当てはすぐなくなります。一方、ライブ配信IDであるvideoIdを取得する手段があれば、videoIdを指定して動画(videos)リソースから低いクォータコストでライブ配信の情報をアクセスできます。
そのため、YouTube Data APIを使わずにチャンネルの最新ライブ配信IDであるvideoIdを取得することが必要とされています。

方法(Ruby)

あまり使われていないかもしれませんが、チャンネルにライブ配信情報があれば下記のurlを使ってその最新のライブ配信playerをページに埋め込むことができます。

url = "https://www.youtube.com/embed/live_stream?channel=<チャンネルID>"

最新のライブ配信を表示してくれれば話がしやすくなります。次のやることがそのページを裸にして必要な情報videoIdを取り出すことです。

content = Net::HTTP.get_response(URI.parse(url)).entity
unless content.match(/watch\?.+/) == nil
  match = content.match(/watch\?.+/)[0]
  videoId = match.sub("watch?v=","").sub("\">","")
end

YouTubeのページやurlには基本的にwatch?v=<videoId>のような形に書かれているので、取得したcontentからmatchsubメソッド使えばvideoIdを簡単に入手できます。(そこにちゃんと整備したYouTubeさんに感謝)
videoIdを入手した以上、YouTube Data APIの動画(videos)リソースを使えば配信状態やら配信時間やらの取得はもう何ても来い!

参考(PHPでのやり方)

6
7
2

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
  3. You can use dark theme
What you can do with signing up
6
7