回答編集履歴

1 syntax highlight

mpyw

mpyw score 4820

2016/06/12 22:09  投稿

サンプルコードが「C言語しか書いたことないだろ…」と言いたくなるような雰囲気が漂う酷いコードだったので,ついカッとなって綺麗に書きなおしてしまいました…
```php
```html
<?php
/**
* HTMLにテキストを出力する際は必ずこの関数を通す
*/
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
// エンドポイントとパラメータを定義
$endpoint = 'http://api.gnavi.co.jp/RestSearchAPI/20150630/';
$params = [
   'keyid' => '04377bf256ad862acecf68ea87f6bc1b',
   'format' => 'json',
   'latitude' => '35.670083',
   'longitude' => '139.763267',
   'range' => '1',
];
// リクエスト実行
$ch = curl_init();
curl_setopt_array($ch, [
   CURLOPT_URL => $endpoint . '?' . http_build_query($params, '', '&'),
   CURLOPT_RETURNTRANSFER => true, // レスポンスボディを返り値として取得
   CURLOPT_FAILONERROR => true, // HTTPステータス400以上はエラーと見なす
   CURLOPT_ENCODING => 'gzip', // 通信を圧縮する
]);
$response = curl_exec($ch);
// エラーのときはテキストとしてエラーメッセージを出して終了
if ($response === false) {
   header('Content-Type: text/plain; charset=UTF-8', true, 500);
   exit(curl_error($ch));
}
// API側がクソ実装してなければこのjson_decodeは必ず成功するはず
$obj = json_decode($response);
// HTMLとして表示
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<title>Example</title>
<?php foreach ($obj->rest as $r): ?>
<table border="1">
   <caption><?=h($r->name)?></caption>
   <tr>
       <th>ID</th>
       <td><?=h($r->id)?></td>
   </tr>
   <tr>
       <th>店舗名</th>
       <td><?=h($r->name)?></td>
   </tr>
   <tr>
       <th>アクセス</th>
       <td><?=h($r->access->line)?>・<?=h($r->access->station)?>から<?=h($r->access->walk)?>分</td>
   </tr>
</table>
<?php endforeach; ?>
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る