나의 기록, 현진록

[iOS/Swift] Apple itunes search API 활용하기 본문

iOS

[iOS/Swift] Apple itunes search API 활용하기

guswlsdk 2022. 7. 2. 23:37
반응형

클론 코딩 시에 자주 활용할 것 같아서 작성하는 글....

 

인스타나 넷플릭스, 뮤직 플레이어 앱과 같이 실제 존재하는 영화, 노래 등의 데이터를 활용할 때 좋은 것 같다.

 

 

iTunes Search API: Constructing Searches

 

developer.apple.com

 

위 사이트에 들어가서 iTunes Search API - Search - Construct a Search에 아이툰즈를 어떻게 사용하는지 정리되어 있다.

 

 

 

아래와 같이 정리된 표를 볼 수 있으며 API를 활용할 때 필수적으로 필요한 파라미터나 입력할 수 있는 값등이 작성되어 있다.

 

Search 카테고리에 있는 ~ Example을 뒤져보면 어떤 형식으로 response 데이터가 이루어져 있는지도 확인할 수 있다.

 

아래 사진은 그 중 하나이다.

 

아래 코드는 넷플릭스 클론 코딩을 할 때 실제 작성했던 코드이며, 상단에 있는 itunes API 파라미터를 활용한 코드가 예시이다.

static func search(term: String, completion: @escaping ([Movie]) -> Void){
        let session = URLSession(configuration: .default)
        var urlComponents = URLComponents(string: "https://itunes.apple.com/search?")!
        let mediaQuery = URLQueryItem(name: "media", value: "movie")
        let entityQuery = URLQueryItem(name: "entity", value: "movie")
        let termQuery = URLQueryItem(name: "term", value: term)
        
        urlComponents.queryItems?.append(mediaQuery)
        urlComponents.queryItems?.append(entityQuery)
        urlComponents.queryItems?.append(termQuery)
        let requestUrl = urlComponents.url!
        
        let dataTask = session.dataTask(with: requestUrl) { data, response, error in
            guard error == nil else{
                print("Error occur: \(String(describing: error))")
                return
            }
            guard let statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode == 200 else{
                completion([])
                return
            }
            guard let resultData = data else{
                completion([])
                return
            }
            do{
                let decodeData = try JSONDecoder().decode(MovieResponse.self, from: resultData)
                completion(decodeData.results)
            }catch let error{
                print("Decoder Error : \(error.localizedDescription)")
            }
//            let string = String(data: resultData, encoding: .utf8)
//            print(string)
            
        }
        dataTask.resume()
    }

 

반응형