前提・実現したいこと
前にも似たような質問をさせていただいたのですが、また理解ができなくなってしまったため、改めて質問させていただきます。
phpでyoutube data v3 APIを使用し、youtubeの検索結果を出力しようと考えております。
そして、以下のコードを作成しました。
ソースコード
php
1<?php 2$url = "https://www.googleapis.com/youtube/v3/search?key=AIzaSyCJ7s-boVMTHwCNWBClnLMK8fE7fV0RQMA&type=video&part=snippet&q=検索"; 3$json = mb_convert_encoding(file_get_contents($url), 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 4$json_arr = json_decode($json,true); 5?>
帰ってきた配列
array(5) { [0]=> array(4) { ["kind"]=> string(20) "youtube#searchResult" ["etag"]=> string(27) "zafjLzTjhDPgdQLnjRNSV4ouMMw" ["id"]=> array(2) { ["kind"]=> string(13) "youtube#video" ["videoId"]=> string(11) "km8kocdKHvA" } ["snippet"]=> array(8) { ["publishedAt"]=> string(20) "2021-07-09T07:51:43Z" ["channelId"]=> string(24) "UCSdiXqnTXy6hukTURUIZbIg" ["title"]=> string(138) "検索してはいけないトラウマ顔面がジワジワ迫ってくるホラーゲームが怖すぎたロブロックス【Roblox】" ["description"]=> string(189) "多分シャイなんでしょうね。 今回は、絶対に検索してはいけない画像の顔がいるホラーゲームをROBLOXで実況しました! ▽ロブロックスの ..." ["thumbnails"]=> array(3) { ["default"]=> array(3) { ["url"]=> string(46) "https://i.ytimg.com/vi/km8kocdKHvA/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/km8kocdKHvA/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/km8kocdKHvA/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } } ["channelTitle"]=> string(45) "オダケン(ホラーゲーム絶叫者)" ["liveBroadcastContent"]=> string(4) "none" ["publishTime"]=> string(20) "2021-07-09T07:51:43Z" } } [1]=> array(4) { ["kind"]=> string(20) "youtube#searchResult" ["etag"]=> string(27) "kTE1r_4icyG16F1SD3dLlKIWrSY" ["id"]=> array(2) { ["kind"]=> string(13) "youtube#video" ["videoId"]=> string(11) "tGUQpp9LGtc" } ["snippet"]=> array(8) { ["publishedAt"]=> string(20) "2020-03-26T12:20:12Z" ["channelId"]=> string(24) "UCaxV7Sf7pdNjlahl6BtJBBw" ["title"]=> string(58) "高速で情報を見つける7つの方法【検索力】" ["description"]=> string(178) "知識ゼロから学べるパソコン・スマホ・タブレット教室の詳細 https://youtu.be/zxGbnx8r8zI 知っておくと便利な7つの検索方法 1.AND検索 2 ..." ["thumbnails"]=> array(3) { ["default"]=> array(3) { ["url"]=> string(46) "https://i.ytimg.com/vi/tGUQpp9LGtc/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/tGUQpp9LGtc/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/tGUQpp9LGtc/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } } ["channelTitle"]=> string(12) "金子晃之" ["liveBroadcastContent"]=> string(4) "none" ["publishTime"]=> string(20) "2020-03-26T12:20:12Z" } } [2]=> array(4) { ["kind"]=> string(20) "youtube#searchResult" ["etag"]=> string(27) "nw9sjkFivdyHmPKVmlFjyy2ONg4" ["id"]=> array(2) { ["kind"]=> string(13) "youtube#video" ["videoId"]=> string(11) "-ZVe14J-YgY" } ["snippet"]=> array(8) { ["publishedAt"]=> string(20) "2021-05-10T12:00:20Z" ["channelId"]=> string(24) "UCutJqz56653xV2wwSvut_hQ" ["title"]=> string(105) "検索結果数[1件]になるまで終われないチャレンジ!変な言葉で検索だァ!" ["description"]=> string(196) "編集 柴田 検索エンジン ヤホー どうも、東海オンエアです。 ぜひチャンネル登録お願いします! サブチャンネル【東海オンエアの控え室】も ..." ["thumbnails"]=> array(3) { ["default"]=> array(3) { ["url"]=> string(46) "https://i.ytimg.com/vi/-ZVe14J-YgY/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/-ZVe14J-YgY/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/-ZVe14J-YgY/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } } ["channelTitle"]=> string(18) "東海オンエア" ["liveBroadcastContent"]=> string(4) "none" ["publishTime"]=> string(20) "2021-05-10T12:00:20Z" } } [3]=> array(4) { ["kind"]=> string(20) "youtube#searchResult" ["etag"]=> string(27) "WKjlprmKprrrd20KfNK7uiFL98c" ["id"]=> array(2) { ["kind"]=> string(13) "youtube#video" ["videoId"]=> string(11) "cBechPt5pQ4" } ["snippet"]=> array(8) { ["publishedAt"]=> string(20) "2021-02-06T10:00:10Z" ["channelId"]=> string(24) "UCGlb5G1IB74kukPMEYDMUMg" ["title"]=> string(149) "絶対に検索してはいけない言葉 ゆっくり茶番実況PART21【日本が滅亡する時に流れる……日本国尊厳維持局】" ["description"]=> string(192) "検索してはいけない言葉、今回やばいです。 日本国尊厳維持局、これマジで怖すぎます。 後のパートで日本国尊厳維持局の別バージョンも ..." ["thumbnails"]=> array(3) { ["default"]=> array(3) { ["url"]=> string(46) "https://i.ytimg.com/vi/cBechPt5pQ4/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/cBechPt5pQ4/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/cBechPt5pQ4/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } } ["channelTitle"]=> string(15) "えすてぃー" ["liveBroadcastContent"]=> string(4) "none" ["publishTime"]=> string(20) "2021-02-06T10:00:10Z" } } [4]=> array(4) { ["kind"]=> string(20) "youtube#searchResult" ["etag"]=> string(27) "JkzGuUuAfzWc_K_vz4q1DzBDskw" ["id"]=> array(2) { ["kind"]=> string(13) "youtube#video" ["videoId"]=> string(11) "67U3513qUaM" } ["snippet"]=> array(8) { ["publishedAt"]=> string(20) "2020-07-22T09:00:01Z" ["channelId"]=> string(24) "UCnoQ6kc6iJhXVRNbnZv2J9g" ["title"]=> string(139) "YouTubeの再生履歴・検索履歴を削除・リセットする方法!記録が残らないシークレットモードも紹介!" ["description"]=> string(172) "iPhoneやスマホ、様々なアプリの使い方や質問・お悩み相談は動画のコメント、またはLINE公式アカウントで受け付けております!" ["thumbnails"]=> array(3) { ["default"]=> array(3) { ["url"]=> string(46) "https://i.ytimg.com/vi/67U3513qUaM/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/67U3513qUaM/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> array(3) { ["url"]=> string(48) "https://i.ytimg.com/vi/67U3513qUaM/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } } ["channelTitle"]=> string(48) "スマホとアプリの教科書チャンネル" ["liveBroadcastContent"]=> string(4) "none" ["publishTime"]=> string(20) "2020-07-22T09:00:01Z" } } }
疑問点
この二次元配列(?)からどのように値を取り出せば良いのかわかりません。
立ててみたコード
php
1<上記のphpコード> 2for ($i = 0 ;count($json_arr) > $i; $i++){ 3 echo $json_arr['title']; 4 //ここでは仮に動画のタイトルを取得するようにしています。(したつもりです。) 5}
試した結果↓
response
1PHP Warning: Undefined array key "title" in /workspace/Main.php on line 7
このようになってしまいます。
補足情報(FW/ツールのバージョンなど)
どのようにすれば値を正しく出せるでしょうか。
解答どうかよろしくお願いします。
なお、質問に不備がある場合はコメント欄から教えてください。
訂正させてただきます。
追記
なお、以下のようにすると正しく要素が取得できました。
php
1<上記のコード> 2for ($i = 0 ;count($json_arr) > $i; $i++){ 3 echo $json_arr['etag']; 4 echo "<br>"; 5}
実行結果
5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM
さらに追記
以下のようにコードを立ててみました。
php
1<?php 2$url = "https://www.googleapis.com/youtube/v3/search?key=AIzaSyCJ7s-boVMTHwCNWBClnLMK8fE7fV0RQMA&type=video&part=snippet&q=検索"; 3$json = mb_convert_encoding(file_get_contents($url), 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 4$json_arr = json_decode($json,true); 5 6for ($i = 0 ;count($json_arr) > $i; $i++){ 7 echo $json_arr[$i]["snippet"]["title"]; 8} 9?>
実行結果
PHP Warning: Undefined array key 0 in /workspace/Main.php on line 7 PHP Warning: Trying to access array offset on value of type null in /workspace/Main.php on line 7 PHP Warning: Trying to access array offset on value of type null in /workspace/Main.php on line 7 というのがたくさん出ます。(文字数制限のため削ってあります。)

回答4件
あなたの回答
tips
プレビュー