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

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

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

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

PHP

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

YouTube API

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

解決済

phpでAPIのjson配列から値を取り出す方法

henupyo107
henupyo107

総合スコア202

JSON

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

PHP

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

YouTube API

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

4回答

0評価

0クリップ

484閲覧

投稿2022/02/03 01:41

編集2022/02/04 07:56

前提・実現したいこと

前にも似たような質問をさせていただいたのですが、また理解ができなくなってしまったため、改めて質問させていただきます。
phpでyoutube data v3 APIを使用し、youtubeの検索結果を出力しようと考えております。
そして、以下のコードを作成しました。

ソースコード

php

<?php $url = "https://www.googleapis.com/youtube/v3/search?key=AIzaSyCJ7s-boVMTHwCNWBClnLMK8fE7fV0RQMA&type=video&part=snippet&q=検索"; $json = mb_convert_encoding(file_get_contents($url), 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $json_arr = json_decode($json,true); ?>

帰ってきた配列

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

<上記のphpコード> for ($i = 0 ;count($json_arr) > $i; $i++){ echo $json_arr['title']; //ここでは仮に動画のタイトルを取得するようにしています。(したつもりです。) }

試した結果↓

response

PHP Warning: Undefined array key "title" in /workspace/Main.php on line 7

このようになってしまいます。

補足情報(FW/ツールのバージョンなど)

どのようにすれば値を正しく出せるでしょうか。
解答どうかよろしくお願いします。
なお、質問に不備がある場合はコメント欄から教えてください。
訂正させてただきます。

追記

なお、以下のようにすると正しく要素が取得できました。

php

<上記のコード> for ($i = 0 ;count($json_arr) > $i; $i++){ echo $json_arr['etag']; echo "<br>"; }

実行結果

5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM 5ZZp9rBdyplZJ1SVgy7zQYv51ZM

さらに追記

以下のようにコードを立ててみました。

php

<?php $url = "https://www.googleapis.com/youtube/v3/search?key=AIzaSyCJ7s-boVMTHwCNWBClnLMK8fE7fV0RQMA&type=video&part=snippet&q=検索"; $json = mb_convert_encoding(file_get_contents($url), 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $json_arr = json_decode($json,true); for ($i = 0 ;count($json_arr) > $i; $i++){ echo $json_arr[$i]["snippet"]["title"]; } ?>

実行結果

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 というのがたくさん出ます。(文字数制限のため削ってあります。)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

madoka9393

2022/02/03 02:33

一先ず修正後のコードを(エラーが出ている旨とエラー内容と共に)質問文に追記していただくのがよいのでは。 (エラーで7行目となっているのでできればコードの全量が望ましいかと思われます)
tabuu

2022/02/03 02:56

>なお、以下のようにすると正しく要素が取得できました。 >for ($i = 0 ;count($json_arr) > $i; $i++){ > echo $json_arr['etag']; > echo "<br>"; >} ループ変数の$iを使わずに取得できているのはおかしいです。 (結果が全て一致しているのもおかしいですが。) $json_arrに格納されているデータをもう一度ご確認ください。
madoka9393

2022/02/03 03:07

「Trying to access array offset on value of type null」が出てるので、 tabuuさんのご指摘の通り、データが取得できているかがあやしいです。 for文の前にデータの内容が正常に取得できているかを確認(echoで出力させるなど)してみてください。
melian

2022/02/03 03:15 編集

というわけで、 for ($i = 0 ;count($json_arr['items']) > $i; $i++){ echo $json_arr['items'][$i]['snippet']['title'].PHP_EOL; } なのではないかと。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JSON

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

PHP

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

YouTube API

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。