目次
利用するAPI
郵便番号から住所を取得する外部APIは下記を利用します。
試しにURLを試してみてください。
https://zipcloud.ibsnet.co.jp/api/search?zipcode=1500043
そうすると、郵便番号から下記のリクエストがreturnされます
{
"message": null,
"results": [
{
"address1": "東京都",
"address2": "渋谷区",
"address3": "道玄坂",
"kana1": "トウキョウト",
"kana2": "シブヤク",
"kana3": "ドウゲンザカ",
"prefcode": "13",
"zipcode": "1500043"
}
],
"status": 200
}
このAPIを利用して、住所を取得していきます。
Laravel側の実装
Controllerでの実装箇所だけ説明します。もしもレイアードアーキテクチャで実装する場合はInfrastructure層のRepositoryまたはAdapterに記述する箇所になります。
/**
* 郵便番号から住所を取得
*
* @param int $zipCode 郵便番号
* @return Illuminate\Http\JsonResponse
*/
public function getAddressFromZipcode(int $zipCode): Illuminate\Http\JsonResponse
{
try {
$address_array = $this->execApi($zipCode);
return response()->json($address_array);
} catch (Exception $exception) {
error_log($exception);
return response()->json(
[
'message' => "住所取得に失敗しました"
],
Response::HTTP_INTERNAL_SERVER_ERROR
);
}
}
/**
* 郵便番号を利用して、住所を取得するAPIを実行
*
* @param int $zipCode 郵便番号
* @return array
*/
private function execApi(int $zipCode): array
{
$url = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=" . $zipCode;
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($handle, CURLOPT_ENCODING, "UTF-8");
$response = curl_exec($handle);
curl_close($handle);
$xml = json_decode($response, true);
return [
"state" => $xml['results'][0]['address1'],
"city" => $xml['results'][0]['address2'],
"address" => $xml['results'][0]['address3']
];
}
上記の例はGuzzleを利用しないでAPIを実行しています。
Guzzleを利用すると下記のようになります
/**
* 郵便番号を利用して、住所を取得するAPIを実行
*
* @param int $zipCode 郵便番号
* @return array
*/
private function execApi(int $zipCode): array
{
$client = new GuzzleHttp\Client();
$url = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=" . $zipCode;
$response = $client->request('GET', $url);
$xml = json_decode($response, true);
return [
"state" => $xml['results'][0]['address1'],
"city" => $xml['results'][0]['address2'],
"address" => $xml['results'][0]['address3']
];
}
これでスッキリしましたね
まとめ
無料でAPIが公開されているので、非常に助かりますね。
どこのサービスも郵便局が公開しているCSVを毎月importして、DBを更新しているので、住所の影響は大きく受けないと思います。
最終更新月も記載されているので、この辺り安心かと思います
Laravel側で住所を取得したので、あとはVue.jsなどのフロントエンド側で住所を表示させるだけになります。
簡単でしたね。
コメント