質問: json_get('https://www.googleapis.com/youtube/v3/search', array( 'key' => YOUTUBE_API_KEY, 'channelId' => $streamer['channelID'], 'part' => 'snippet', 'eventType' => 'live', 'type' => 'video', ), true); if($response["items"]!=null){ //ライブ中かどうかの判定(配列の内"item"の中身が空かどうかで判断) //ライブ中だった場合の処理 } } ``` Youtube Data APIから受け取る情報の内、必要なものは「ライブ配信中かどうか」という情報だけであり、それ以外については利用しておりません もしコードの中に無駄な記述等があればご教授いただけると嬉しいです
回答: 「『チャンネルを指定し、そのチャンネル内に紐付けられた動画のうち、ライブ状態の動画を抽出する』ことを、Youtube data APIを使用して行う」という仕様において、あなたが書かれたコード「の中に」は、クォータ消費に関して無駄な部分はありません。 searchは、1回のリクエストでクォータを最低100消費します。あなたが書いたコードも「無駄なく」100消費します。 クォータ消費量については、https://developers.google.com/youtube/v3/determine_quota_cost?hl=ja を参照してください。 searchを使う限り、消費クォータ量は減らせません。 問いの本質は、「指定したチャンネル内の動画からライブ状態の動画を抽出する際に、もっとクォータ消費を少なくするやり方はないか?」ということだと理解しました。 消費クォータ量を少なくするためには、考え方を変える必要があります。 Youtube DATA APIでは、チャンネルから条件に合致した動画一覧を取得する場合(search)は1回あたりクォータを100消費しますが、 特定の動画IDのライブ状態を調べる場合、1回あたり約2.67しか消費しません。 したがって、 1. APIを使用せずにチャンネルから動画IDのリストを取得し、 2. 取得した動画IDのライブ状態をAPIを使って調べれば、 大幅にクォータ消費を減らせます。 1. APIを使用せずにチャンネルから動画一覧を取得する方法 方法として、YouTubeチャンネルのRSSフィード内容をパースするやり方があります。 (ただし、YouTubeの不具合その他の要因により、フィードへの反映が遅れる場合があります) 具体的なコードはここでは書きませんが、「php xml フィード youtube」で検索すればすぐコード例は出てきます。 2. 取得した動画IDのライブ状態をAPIを使って調べる方法 1.で取得した動画IDのライブ状態を調べる関数の例を下記に記しました。 引数$video_idは、11文字のYouTube動画IDです。 戻り値は文字列で、 'live'⇒ライブ配信中、'upcoming'⇒配信予約、'none'⇒アーカイブ済み、'error'⇒動画IDまたはAPIキーが誤っている ことを示します。 ``` /* below sample code © 2020 taizan-hokuto */ //戻り値:'live'⇒ライブ配信中、'upcoming'⇒配信予約、'none'⇒アーカイブ済み、'error'⇒動画IDまたはAPIキーが誤っている" function get_livestatus($video_id){ $response = json_get('https://www.googleapis.com/youtube/v3/videos', array( 'key' => YOUTUBE_API_KEY, 'id' => $video_id, 'part'=>'snippet', 'fields'=>'items(id,snippet(liveBroadcastContent))' ), true); if($response["items"]==null){ return 'error'; } return $response["items"][0]["snippet"]["liveBroadcastContent"]; } ```