openBDという書籍のデータをjson形式で取得できるAPIがあります。
そこからデータを取得し、PHPで処理を行っております。
該当のソースコード
PHP
1<?php 2 $url = "https://api.openbd.jp/v1/get?isbn="; 3 4 $isbn = "978-4-434-26619-5"; 5 $isbn_int = str_replace("-", "", $isbn); 6 7 $result = $url.$isbn_int; 8 9 $json = file_get_contents($result); 10 11 #文字コードを文字化けしないようにする。 12 $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 13 14 $arr = json_decode($json,true); 15 16 $isbn_13 = $arr[0]['onix']['RecordReference']; 17 18 19var_dump($isbn_13); 20var_export($arr); 21?>
表示結果
json
1string(13) "9784434266195" 2array ( 3 0 => 4 array ( 5 'onix' => 6 array ( 7 'RecordReference' => '9784434266195', 8 'NotificationType' => '03', 9 'ProductIdentifier' => 10 array ( 11 'ProductIDType' => '15', 12 'IDValue' => '9784434266195', 13 ), 14 'DescriptiveDetail' => 15 array ( 16 'ProductComposition' => '00', 17 'ProductForm' => 'BA', 18 'ProductFormDetail' => 'B119', 19 'TitleDetail' => 20 array ( 21 'TitleType' => '01', 22 'TitleElement' => 23 array ( 24 'TitleElementLevel' => '01', 25 'TitleText' => 26 array ( 27 'collationkey' => 'ジョウモンジンノニホンシ', 28 'content' => '縄文人の日本史', 29 ), 30 'Subtitle' => 31 array ( 32 'collationkey' => 'ジョウモンジンカラアイヌヘ', 33 'content' => '縄文人からアイヌへ', 34 ), 35 ), 36 ), 37 'Contributor' => 38 array ( 39 0 => 40 array ( 41 'SequenceNumber' => '1', 42 'ContributorRole' => 43 array ( 44 0 => 'A01', 45 ), 46 'PersonName' => 47 array ( 48 'collationkey' => 'サワダ ケンイチ', 49 'content' => '澤田 健一', 50 ), 51 'BiographicalNote' => '昭和39年(1964)札幌市生まれ。同志社大学工学部卒業。 52既存の枠にとらわれず、歴史・考古学を独自に学ぶ。思いつくまま読み・調べ・歩き・聞き・見ることを旨とし、文献やデータを忠実に読み解き歴史の事実に迫ることを目指している。', 53 ), 54 ), 55 'Language' => 56 array ( 57 0 => 58 array ( 59 'LanguageRole' => '01', 60 'LanguageCode' => 'jpn', 61 'CountryCode' => 'JP', 62 ), 63 ), 64 'Extent' => 65 array ( 66 0 => 67 array ( 68 'ExtentType' => '11', 69 'ExtentValue' => '206', 70 'ExtentUnit' => '03', 71 ), 72 ), 73 'Subject' => 74 array ( 75 0 => 76 array ( 77 'SubjectSchemeIdentifier' => '78', 78 'SubjectCode' => '0095', 79 ), 80 1 => 81 array ( 82 'SubjectSchemeIdentifier' => '79', 83 'SubjectCode' => '14', 84 ), 85 2 => 86 array ( 87 'SubjectSchemeIdentifier' => '20', 88 'SubjectHeadingText' => '縄文;おもしろい;アイヌ;歴史;弥生;北海道', 89 ), 90 ), 91 ), 92 'CollateralDetail' => 93 array ( 94 'TextContent' => 95 array ( 96 0 => 97 array ( 98 'TextType' => '02', 99 'ContentAudience' => '00', 100 'Text' => '今まで常識とされてきた日本の歴史は正しいのか?これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す渾身の書。', 101 ), 102 1 => 103 array ( 104 'TextType' => '02', 105 'ContentAudience' => '04', 106 'Text' => '今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。', 107 ), 108 2 => 109 array ( 110 'TextType' => '03', 111 'ContentAudience' => '00', 112 'Text' => 'これが本当の縄文時代だ! 113今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? 114 115縄文時代から連綿と続く日本の歴史。 116一般に語られる事実に含まれる不可解な謎は、アイヌの視点を通すことにより解き明かされる!これまで考えてこられたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。 117 118(中略)しかし、それは完全なる誤りである。', 119 ), 120 3 => 121 array ( 122 'TextType' => '04', 123 'ContentAudience' => '00', 124 'Text' => '目次 125はじめに アイヌとは 126序章一 インディアンの祖先は日本人? 127序章二 小さい田んぼ、太い田んぼ 128一 縄文以前(旧石器時代) 129二 DNAから見る縄文日本人 130三 縄文時代のはじまり 131四 縄文人のくらし 132五 イノシシ祭り 133六 クマ祭り、イオマンテ 134七 縄文語、アイヌ語 135八 縄文語地名と大和朝廷が名付けた地名 136九 北海道の縄文遺跡 137十 大川遺跡(余市町) 138十一 海民 139十二 共通する神話 140十三 夷(えみし・えびす) 141十四 素戔嗚尊 142 143参考資料', 144 ), 145 ), 146 'SupportingResource' => 147 array ( 148 0 => 149 array ( 150 'ResourceContentType' => '01', 151 'ContentAudience' => '01', 152 'ResourceMode' => '03', 153 'ResourceVersion' => 154 array ( 155 0 => 156 array ( 157 'ResourceForm' => '02', 158 'ResourceVersionFeature' => 159 array ( 160 0 => 161 array ( 162 'ResourceVersionFeatureType' => '01', 163 'FeatureValue' => 'D502', 164 ), 165 1 => 166 array ( 167 'ResourceVersionFeatureType' => '04', 168 'FeatureValue' => '9784434266195.jpg', 169 ), 170 ), 171 'ResourceLink' => 'https://cover.openbd.jp/9784434266195.jpg', 172 ), 173 ), 174 ), 175 ), 176 ), 177 'PublishingDetail' => 178 array ( 179 'Imprint' => 180 array ( 181 'ImprintIdentifier' => 182 array ( 183 0 => 184 array ( 185 'ImprintIDType' => '24', 186 'IDValue' => '4032', 187 ), 188 1 => 189 array ( 190 'ImprintIDType' => '19', 191 'IDValue' => '434', 192 ), 193 ), 194 'ImprintName' => '柏艪舎', 195 ), 196 'Publisher' => 197 array ( 198 'PublishingRole' => '01', 199 'PublisherIdentifier' => 200 array ( 201 0 => 202 array ( 203 'PublisherIDType' => '24', 204 'IDValue' => '4032', 205 ), 206 1 => 207 array ( 208 'PublisherIDType' => '19', 209 'IDValue' => '434', 210 ), 211 ), 212 'PublisherName' => '星雲社', 213 ), 214 'PublishingDate' => 215 array ( 216 0 => 217 array ( 218 'PublishingDateRole' => '01', 219 'Date' => '20191002', 220 ), 221 1 => 222 array ( 223 'PublishingDateRole' => '25', 224 'Date' => '20190922', 225 ), 226 ), 227 ), 228 'ProductSupply' => 229 array ( 230 'MarketPublishingDetail' => 231 array ( 232 'PublisherRepresentative' => 233 array ( 234 0 => 235 array ( 236 'AgentRole' => '08', 237 'AgentIdentifier' => 238 array ( 239 0 => 240 array ( 241 'AgentIDType' => '01', 242 'IDTypeName' => '取引コード', 243 'IDValue' => '4032', 244 ), 245 ), 246 'AgentName' => '星雲社', 247 ), 248 ), 249 'MarketPublishingStatus' => '00', 250 'MarketPublishingStatusNote' => '1;1', 251 ), 252 'SupplyDetail' => 253 array ( 254 'ReturnsConditions' => 255 array ( 256 'ReturnsCodeType' => '04', 257 'ReturnsCode' => '03', 258 ), 259 'ProductAvailability' => '99', 260 'Price' => 261 array ( 262 0 => 263 array ( 264 'PriceType' => '03', 265 'PriceAmount' => '1300', 266 'CurrencyCode' => 'JPY', 267 ), 268 ), 269 ), 270 ), 271 ), 272 'hanmoto' => 273 array ( 274 'toji' => '並製', 275 'zaiko' => 11, 276 'maegakinado' => 'はじめに アイヌとは 277 278アイヌとはじめて出合ったのは小学校の授業であった。先生の話では「アイヌは数を数えられないので鮭十尾を和人に渡すとき、和人に『はじめ、一、二、三、四、五、六、七、八、九、十、おわり』と数えられてしまい、二尾も損をしてしまう」と言うのだ。なぜかこの話が強烈な印象となって記憶に残っている。当時なにも分からない小学生にとって、アイヌとは数も数えられない未開で野蛮な原始人のように意識の中に刷り込まれてしまったのである。そんな出だしだったので失礼な言い方ではあるが、アイヌとはいったい何なのか分からぬままであった。 279 280澤田 健一', 281 'kaisetsu105w' => '今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。', 282 'genrecodetrc' => 3, 283 'kankoukeitai' => 'BCD', 284 'obinaiyou' => '―賢者は歴史に学ぶ。 285縄文時代から連綿と続く日本の歴史。 286', 287 'hatsubai' => '星雲社', 288 'hatsubaiyomi' => 'セイウンシャ', 289 'author' => 290 array ( 291 0 => 292 array ( 293 'listseq' => 1, 294 'dokujikubun' => '著', 295 ), 296 ), 297 'datemodified' => '2019-10-02 10:28:05', 298 'datecreated' => '2019-09-10 15:49:33', 299 'hanmotoinfo' => 300 array ( 301 'name' => '柏艪舎', 302 'yomi' => 'ハクロシャ', 303 'url' => 'http://www.hakurosya.com', 304 'twitter' => 'https://twitter.com/hakurosya', 305 'facebook' => 'https://business.facebook.com/hakurosya/', 306 ), 307 ), 308 'summary' => 309 array ( 310 'isbn' => '9784434266195', 311 'title' => '縄文人の日本史 縄文人からアイヌへ', 312 'volume' => '', 313 'series' => '', 314 'publisher' => '柏艪舎', 315 'pubdate' => '20191002', 316 'cover' => 'https://cover.openbd.jp/9784434266195.jpg', 317 'author' => '澤田健一/著', 318 ), 319 ), 320)
文字数オーバーとなっていたので、jsonデータの一部を削除しました。
質問したいのは
・多次元配列のデータを取り出す方法があっているのか
$isbn_13 = $arr[0]['onix']['RecordReference'];
この部分はほかにもいろいろとデータを取り出す予定なのですが、階層が深くなると可読性に欠けるのではと思っています。
・連想配列にいれてアロー演算子では取得できないのか
連想配列に入れるような場合もこちらを参考に考えてみましたが、
アロー演算子では取得できませんでした。過去のteratailでの質問をみると
アロー演算子はオブジェクトを取得する際に使用するものとありましたが、
今回取得しているjsonデータとリンク先のjsonデータはどういう風に構造がちがうのでしょうか?
同一APIのデータではないので比較するべきものではないかもしれませんが、
jsonデータとオブジェクトについて教えてください。
長くなりましたが、
今回のようなAPIからデータを取得する際どのような書き方が適しているでしょうか?
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/03 00:55 編集
退会済みユーザー
2019/10/03 01:00
2019/10/03 02:38 編集
2019/10/23 03:05