注意
利用規約-YouTube
使い方によってYouTube利用規約に抵触する場合があるため、必ずYouTube利用規約を確認してください。
バックグランド
最近の個人アプリ開発中に出会った問題です。
YouTubeのライブ配信が日々活発している今、チャンネルIDを持ちながらそのチャンネルの最新ライブ配信の情報を取得したい場合がよくあります。しかし、YouTube Data APIを使って最新ライブ配信情報を取得しようとすると以下二つの問題があります。
- チャンネル情報丸ごと取得する
チャンネル(channels)
リソースからチャンネル最新動画取得しようとしてもライブ配信情報(ライブ配信中または公開予定の情報)が含まれない。(現在2020年5月時点) - チャンネル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
からmatch
とsub
メソッド使えばvideoId
を簡単に入手できます。(そこにちゃんと整備したYouTubeさんに感謝)
videoId
を入手した以上、YouTube Data APIの動画(videos)
リソースを使えば配信状態やら配信時間やらの取得はもう何ても来い!