質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Q&A

解決済

1回答

589閲覧

Youtube Data APIで特定のゲームのライブ配信状況を閲覧者数順に取得する方法

comcom

総合スコア10

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

0グッド

0クリップ

投稿2022/09/23 17:39

Youtube Data APIを利用して、「特定のゲームのライブ配信状況を閲覧者数順に取得する」という動作を実装しました。

しかし、ライブ配信しているのに取得できないチャンネルが出てきてしまいます。

該当のソースコード

PHP

1function json_request($url, $query = array(), $assoc = false, $header = array(), $isget = true) 2{ 3 if ($query) $url .= ('?' . http_build_query($query, '', '&', PHP_QUERY_RFC3986)); 4 5 $curl = curl_init(); 6 curl_setopt($curl, CURLOPT_URL, $url); 7 if (!$isget) curl_setopt($curl, CURLOPT_POST, true); 8 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 9 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 10 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 11 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); 12 $responseString = curl_exec($curl); 13 curl_close($curl); 14 return ($responseString !== false) ? json_decode($responseString, $assoc) : false; 15} 16 17function get_search($options) 18{ 19 return 20 json_request('https://www.googleapis.com/youtube/v3/search', $options, true); 21} 22 23function get_youtube_stream_data($game_title, $page_token = '') 24{ 25 $options = array( 26 'key' => YOUTUBE_API_KEY, 27 'q' => $game_title, 28 'part' => 'snippet', 29 'order' => 'viewCount', 30 'eventType' => 'live', 31 'maxResults' => 50, 32 'type' => 'video', 33 'regionCode' => 'JP', 34 'relevanceLanguage' => 'ja', 35 ); 36 if ($page_token != '') $options['pageToken'] = $page_token; 37 38 $youtube_response = get_search($options); 39 40 if ($youtube_response === false || isset($youtube_response['error'])) { 41 42 } elseif (count($youtube_response['items']) == 0) { 43 44 } else { 45 46 if ($page_token != '') { 47 get_youtube_stream_data($game_title, $page_token); 48 } 49 50 } 51 52}

$game_titleにはゲームのタイトル名が入ります。(例:スプラトゥーン3など)
ゲーム名のタグで検索できないか調べてはみましたが結局わかりませんでした。

閲覧者数が上位のライブ配信も取得できないこともあり、情報の信頼性が非常に低い状況です。
解決策はないでしょうか。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
以下のサイトで同様の問題についての解決方法が載っていました。
https://stackoverflow.com/questions/24506417/fetching-videos-from-auto-generated-channel-in-youtube-api

取得したいゲームの自動生成チャンネルのチャンネルIDを取得し、
以下を実行することでライブ配信のプレイリストIDが取得できるようです。
https://www.googleapis.com/youtube/v3/channelSections?part=snippet%2C+contentDetails&channelId=UC4R8DWoMoI7CAwX8_LjQHig&hl=zh-TW&key={YOUR_API_KEY}

あとはプレイリストIDから
https://www.googleapis.com/youtube/v3/playlistItems
を使用してプレイリストアイテムを取得すれば特定のゲームのライブ配信情報が取れました。

投稿2022/09/26 17:43

comcom

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問