본문 바로가기

Project/HiddenGem

📍tour api를 통해 데이터 가져오기 (데이터를 확인할 목적)

 

✅ 구현하고자 하는 기능 

 

  • 상단에 가로 스크롤 카테고리 컬렉션뷰 (ex: 전체, 한식, 중식, 양식 등).
  • 사용자가 카테고리 버튼을 누르면 아래에 관련된 결과를 보여주는 컬렉션뷰가 갱신됨.
  • 데이터를 API로부터 가져오는 구조임.

이때,

  • StoreCategory (상단 버튼들)는 앱 시작 시 1회 불러오면 되고
  • 버튼 클릭 시 해당 카테고리에 맞는 다른 데이터를 불러와야 함

 

이때 외부 API를 요청하는 방식은 await / async를 사용할 예정 

-> 관리 용이성 확보차원 

 

func getStoreCategories() async throws -> [StoreCategory] {
        // 카테고리 URL 구성
        let urlString = "\(Constants.baseURLString)/categoryCode1?serviceKey=\(Constants.api_key)&numOfRows=10&pageNo=1&MobileOS=ETC&MobileApp=AppTest&contentTypeId=39&cat1=A05&cat2=A0502&_type=json"
        
        guard let url = URL(string: urlString) else {
            throw URLError(.badURL)
        }
        
        let (data, _) = try await URLSession.shared.data(from: url)
        let decoded = try JSONDecoder().decode(CategoryResponse.self, from: data)

        return decoded.response.body.items.item
    }
    
    
    
    func getData() {
        let categoryURL = ""
        guard let url = URL(string: categoryURL) else {
            print("❌ URL 생성 실패")
            return
        }
        
        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            if let error = error {
                print("❌ 에러 발생: \(error.localizedDescription)")
                return
            }
            
            guard let data = data else {
                print("❌ 데이터가 없습니다.")
                return
            }
            
            do {
                let decoded = try JSONDecoder().decode(CategoryResponse.self, from: data)
                let categories: [StoreCategory] = decoded.response.body.items.item
                print("✅ 필요한 카테고리만 출력:")
                categories.forEach { print("- \( $0.name ) (\( $0.code ))") }
            } catch {
                print("❌ 디코딩 실패: \(error.localizedDescription)")
            }
        }
        
        task.resume()
    }

 

 

🔷 불러온 데이터를 확인할 목적으로 "JSONSerialization" 사용

    
    
// URLSession 데이터 요청
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        print("에러 발생: \(error.localizedDescription)")
        return
    }

    guard let data = data else {
        print("데이터가 없습니다.")
        return
    }

    // JSON 파싱 시도
    do {
        if let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
            print("받아온 JSON:")
            print(jsonObject)
        } else {
            print("JSON 파싱 실패")
        }
    } catch {
        print("JSONSerialization 에러: \(error.localizedDescription)")
    }
}

// 요청 시작
task.resume()

 

 

'Project > HiddenGem' 카테고리의 다른 글

🔨 API 호출 함수 손 보기 (에러 처리 과정 적용)  (0) 2025.04.25