

나는 제주도 주차장 api를 사용했다.
https://api.odcloud.kr/api/15050093/v1/uddi:d19c8e21-4445-43fe-b2a6-865dff832e08?page=1&perPage=600&cond%5B%EC%A7%80%EC%97%AD%EC%BD%94%EB%93%9C%3A%3AEQ%5D=50110&serviceKey=\(apiKey)
여기 apiKey 자리에 키를 넣고 검색해보면

다음과 같이 뜬다. 나는 크롬의 jsonViewer 확장프로그램을 이용했다.

여기서 필요없는 데이터는 변수로 선언하지 않아도 된다.
class NewsAPI: ObservableObject {
static let shared = NewsAPI()
private init() { }
@Published var posts = [ParkingItem]()
private var apikey: String? {
get {
let keyfilename = "ApiKeys"
let api_key = "Parking_API_KEY"
// 생성한 .plish 파일 경로 불러오기
guard let filePath = Bundle.main.path(forResource: keyfilename, ofType: "plist") else {
fatalError("Couldn't find file '\(keyfilename).plist")
}
// .plist 파일 내용을 딕셔너리로 받아오기
let plist = NSDictionary(contentsOfFile: filePath)
// 딕셔너리에서 키 찾기
guard let value = plist?.object(forKey: api_key) as? String else {
fatalError("Couldn't find key '\(api_key)'")
}
return value
}
}
// 디코딩하는 부분
func feachData() {
guard let apiKey = apikey else { return }
print("apiKey: \(apiKey)")
let urlString =
"https://api.odcloud.kr/api/15050093/v1/uddi:d19c8e21-4445-43fe-b2a6-865dff832e08?page=1&perPage=600&cond%5B%EC%A7%80%EC%97%AD%EC%BD%94%EB%93%9C%3A%3AEQ%5D=50110&serviceKey=\(apiKey)"
guard let url = URL(string: urlString) else { return }
let session = URLSession(configuration: .default)
// dataTask() 메서드의 with: 매개변수에 url 또는 request 객체를 가지고 통신
let task = session.dataTask(with: url){ data, response, error in
if let error = error {
print(error.localizedDescription)
return
}
guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {
// 정상적으로 값이 오지 않았을 때 처리
return
}
guard let data = data else {
print("No data received")
return
}
//여기서 디코딩 함
do {
let json = try JSONDecoder().decode(Results.self, from: data)
DispatchQueue.main.async {
self.posts = json.data
}
} catch let error {
print(error)
}
}
task.resume()
}
}

