結論からいうと
以下のようなAPIを自作しようとしています。
駅検索APIサービス
heart express API
自作したコード(全文)
※phpビルトインサーバーで動きます
php
1<?php 2header('Content-Type: application/json; charset=UTF-8'); 3 4// データリソース(モックアップ) 5$db['db'] = array( 6 'station' => array( 7 array ( 8 'name' => '三ノ宮', 9 'prefecture' => '兵庫県', 10 'line' => 'JR神戸線', 11 'x' => 135.1952558, 12 'y' => 34.6945454, 13 'postal' => '6770039', 14 'distance' => '100m', 15 'prev' => '', 16 'next' => '' 17 ), 18 array ( 19 'name' => '神戸三宮', 20 'prefecture' => '兵庫県', 21 'line' => '阪神', 22 'x' => 135.1952558, 23 'y' => 34.6945454, 24 'postal' => '6770039', 25 'distance' => '100m', 26 'prev' => '', 27 'next' => '' 28 ), 29 array ( 30 'name' => '東京', 31 'prefecture' => '東京都', 32 'line' => 'JR山手線', 33 'x' => 139.7673068, 34 'y' => 35.6809591, 35 'postal' => '6770039', 36 'distance' => '150m', 37 'prev' => '', 38 'next' => '' 39 ), 40 array ( 41 'name' => '神田', 42 'prefecture' => '東京都', 43 'line' => 'JR山手線', 44 'x' => 139.7709, 45 'y' => 35.6918, 46 'postal' => '6770039', 47 'distance' => '150m', 48 'prev' => '', 49 'next' => '' 50 ), 51 ), 52); 53 54if(isset($_GET['method'])) { // methodでGET送信 55 $getX = htmlspecialchars($_GET['x']); // xでGET送信 56 $getY = htmlspecialchars($_GET['y']); // yでGET送信 57 58 foreach ($db as $val) { 59 foreach ($val['station'] as $val) { 60 $name = $val['name']; 61 $prefecture = $val['prefecture']; 62 $line = $val['line']; 63 $longitude = floatval($val['x']); 64 $latitude = floatval($val['y']); 65 $postal = $val['postal']; 66 $distance = $val['distance']; 67 $prev = $val['prev']; 68 $next = $val['next']; 69 70 // GETパラメーターによって整合するもの表示 71 if ($longitude+1 >= $getX && $getX >= $longitude-1 72 && $latitude+1 >= $getY && $getY >= $latitude-1) { 73 $arr['response'][] = array( 74 'station' => array( 75 array ( 76 'name' => $name, 77 'prefecture' => $prefecture, 78 'line' => $line, 79 'x' => $longitude, 80 'y' => $latitude, 81 'postal' => $postal, 82 'distance' => $distance, 83 'prev' => $prev, 84 'next' => $next, 85 ), 86 ), 87 ); 88 } 89 } 90 } 91} else { 92 $arr['status'] = 'no request'; 93} 94 95print json_encode($arr, JSON_PRETTY_PRINT);
http://localhost:8000/?method=get&x=135&y=35
でアクセスすると以下のようなJsonデータが吐き出される。
json
1{ 2 response: [ 3 { 4 station: [ 5 { 6 name: "三ノ宮", 7 prefecture: "兵庫県", 8 line: "JR神戸線", 9 x: 135.1952558, 10 y: 34.6945454, 11 postal: "6770039", 12 distance: "100m", 13 prev: "元町", 14 next: "灘" 15 } 16 ] 17 }, 18 { 19 station: [ 20 { 21 name: "神戸三宮", 22 prefecture: "兵庫県", 23 line: "阪神", 24 x: 135.1952558, 25 y: 34.6945454, 26 postal: "6770039", 27 distance: "100m", 28 prev: "", 29 next: "" 30 } 31 ] 32 } 33 ] 34}
一見すると要件を満たしてるように見えるが、
微妙にheart express APIとスキーマが違っています。
heart express APIではstation内に要素が追加されているのに対し、
自作したAPIではresponse直下に配列があり、しかもstationキーが複数出てしまっています。
かといって
$arr['response'][] = array(
の部分を$arr['response'] = array(
にすると
スキーマは同じになるのですが、配列は追加されず、上書きされてしまいます。
最終的に以下のようなJsonデータを作るにはどうすればいいのでしょうか?
json
1 2{ 3 response: { 4 station: [ 5 { 6 name: "神戸三宮", 7 prefecture: "兵庫県", 8 line: "阪神", 9 x: 135.1952558, 10 y: 34.6945454, 11 postal: "6770039", 12 distance: "100m", 13 prev: "", 14 next: "" 15 }, 16 { 17 ... stationの中に追加する方法が知りたい 18 } 19 , 20 { 21 ... stationの中に追加する方法が知りたい 22 } 23 ] 24 } 25}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/05 01:43