장소를 검색했을 때, 해당 장소에 대한 정보를 얻기 위해서 카카오 API 중 키워드로 장소 검색을 선택하였다. 네이버 API를 먼저 사용하려고 시도 하였지만 API호출 예제에 Swift 코드가 없어서 Rest API Tool가 있는 카카오 API를 사용하였다.
Alamofire를 사용하여 JSON파싱을 할 것이다. Alamofire는 스위프트로 작성된 HTTP 네트워킹 라이브러리다. Alamofire을 설치하기 위해서 CocoaPods가 필요한데, CocoaPods를 설치하기 위해서는 nodejs도 설치해야한다. 따라서 nodejs -> CocoaPods -> Alamofire 순으로 설치하였다.
파싱한 결과를 담아줄 List를 먼저 선언하였다.
public struct Place{
let placeName :String
let roadAdressName:String
let longitudeX:String
let latitudeY:String
}
var resultList=[Place]()
headers 안에 REST API Key를, parameters에는 요청할 때 필요한 파라미터를 넣어주었다.
요청한 결과 값이 documents는 array형식으로, place_name, road_adress_name, x, y 등등 내부 값은 string형식이다.
한개의 장소에 대한 정보들을 resultList에 append하여 저장한 후, 확인하기 위해서 print를 해보았다.
let headers: HTTPHeaders = [
"Authorization": "KakaoAK [REST API KEY]"
]
let parameters: [String: Any] = [
"query": keyword,
"page": page,
"size": 15
]
AF.request("https://dapi.kakao.com/v2/local/search/keyword.json", method: .get,
parameters: parameters, headers: headers)
.responseJSON(completionHandler: { response in
switch response.result {
case .success(let value):
if let detailsPlace = JSON(value)["documents"].array{
for item in detailsPlace{
let placeName = item["place_name"].string ?? ""
let roadAdressName = item["road_address_name"].string ?? ""
let longitudeX = item["x"].string ?? ""
let latitudeY = item["y"].string ?? ""
self.resultList.append(Place(placeName: placeName,
roadAdressName: roadAdressName, longitudeX: longitudeX, latitudeY: latitudeY))
}
}
print("\(self.resultList[0].placeName)")
print("\(self.resultList[1].placeName)")
print("\(self.resultList[2].placeName)")
case .failure(let error):
print(error)
}
})
반응형
'Programming Language > Swift' 카테고리의 다른 글
[Swift] 컬렉션 (0) | 2020.07.24 |
---|---|
[Swift] 문자열 (0) | 2020.07.21 |
[Swift] 변수와 상수 (0) | 2020.07.21 |