Programming Language/Swift

[Swift] 카카오 API_키워드로 장소 검색

lingk 2020. 8. 14. 19:51

장소를 검색했을 때, 해당 장소에 대한 정보를 얻기 위해서 카카오 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