728x90
반응형
카카오 주소검색 API를 사용하여 입력된 주소에 대한 법정동 정보와 행정동 정보를 조회할 수 있습니다.
다음은 각 단계별로 설명한 내용입니다.
1. RestClient 생성
val restClient = RestClient.builder()
.defaultStatusHandler(HttpStatusCode::is4xxClientError) { req, res ->
logger.info { "KakaoAPI getAddressToLegalCode RestClient 생성에 실패하였습니다. statusCode : ${res.statusCode}" }
}.build()
API 호출은 RestClient를 사용했습니다.
- RestClient 객체를 생성합니다.
- 클라이언트 에러(4xx)가 발생했을 때 로그를 남기도록 기본 상태 핸들러를 설정합니다.
2. API 요청
var resultStr = restClient.get()
.uri { uriBuilder ->
uriBuilder.scheme("https")
.host("dapi.kakao.com")
.path("/v2/local/search/address.json")
.queryParam("query", address)
.build()
}
.headers { headers ->
headers.set("Authorization", "KakaoAK ${key}")
}
.retrieve()
.onStatus(HttpStatusCode::is5xxServerError) { req, res ->
logger.info { "GeocoderAPI coordsToAddress API 호출이 실패하였습니다. statusCode : ${res.statusCode}" }
}
.body(String::class.java)
GET 요청을 설정합니다.
- uriBuilder를 사용하여 URI를 구성합니다.
- https 스키마를 사용하고, dapi.kakao.com 호스트에 /v2/local/search/address.json 경로로 접근합니다.
- 주소를 쿼리 파라미터로 추가합니다.
- 헤더에 인증 키를 설정합니다.
- 서버 에러(5xx)가 발생했을 때 로그를 남기도록 상태 핸들러를 설정합니다.
- 응답 본문을 문자열로 받습니다.
3. 응답 처리 및 JSON 파싱
val result = JsonParser.parseString(resultStr) as JsonObject
val documents = result.getAsJsonArray("documents")
val address = documents.get(0).asJsonObject.getAsJsonObject("address")
val bCode = address.get("b_code").asString //법정동코드
val hCode = address.get("h_code").asString //행정동코드
- resultStr 응답 문자열을 JsonObject로 파싱합니다.
- documents 배열을 추출합니다.
- 첫 번째 document 객체에서 address 객체를 추출합니다.
- address 객체에서 법정동, 행정동 값을 추출합니다.
- address 객체에는 아래와 같이 값이 담겨 있습니다.
4. 전체코드
전체코드는 아래와 같습니다.
private val logger = KotlinLogging.logger {}
object KakaoAPI {
fun getLegalCode(address: String): Unit {
val restClient = RestClient.builder()
.defaultStatusHandler(HttpStatusCode::is4xxClientError) { req, res ->
logger.info { "KakaoAPI getAddressToLegalCode RestClient 생성에 실패하였습니다. statusCode : ${res.statusCode}" }
}.build()
val key = "REST API 키값"
var resultStr = restClient.get()
.uri { uriBuilder ->
uriBuilder.scheme("https")
.host("dapi.kakao.com")
.path("/v2/local/search/address.json")
.queryParam("query", address)
.build()
}
.headers { headers ->
headers.set("Authorization", "KakaoAK ${key}")
}
.retrieve()
.onStatus(HttpStatusCode::is5xxServerError) { req, res ->
logger.info { "GeocoderAPI coordsToAddress API 호출이 실패하였습니다. statusCode : ${res.statusCode}" }
}
.body(String::class.java)
val result = JsonParser.parseString(resultStr) as JsonObject
val documents = result.getAsJsonArray("documents")
val address = documents.get(0).asJsonObject.getAsJsonObject("address")
val bCode = address.get("b_code").asString //법정동
val hCode = address.get("h_code").asString //행정동
}
}
참고자료
728x90
반응형
'개발 > GIS' 카테고리의 다른 글
vworld Geocoder 2.0 vs 카카오 API: 좌표 변환 결과 비교 (0) | 2024.08.09 |
---|---|
지번주소와 도로명주소 차이점, 법정동과 행정동의 이해 (3) | 2024.07.24 |