본문 바로가기
iOS/기초

URLSession 사용하기

by jedchoi 2022. 3. 21.


Apple AppStore에서 app을 검색할 때 호출할 수 있는 함수. 아래처럼 사용하면 되겠다.

import Foundation
import ReactiveSwift

class ITunesAPIDataSource: ITunesAPIInterface {
    let session = URLSession.shared
    
    func getAppList(key: String) -> SignalProducer<String, TraceError> {
        return SignalProducer { observer, lifetime in
            guard !lifetime.hasEnded else {
                observer.sendInterrupted()
                return
            }

            guard let url = self.buildUrl(term: key) else {
                observer.send(error: TraceError(message: "url error", code: ""))
                return
            }
            let task = self.session.dataTask(with: url) { data, response, error in
                guard let data = data else {
                    observer.send(error: TraceError(error: error))
                    return
                }
                
                observer.send(value: String(data: data, encoding: .utf8) ?? "")
            }
            task.resume()
        }
    }

    func buildUrl(term: String) -> URL? {
        let parameters = ["term":term, "country":"KR","media":"software","limit":"10"]

        var urlComponents = URLComponents()
        urlComponents.scheme = "https"
        urlComponents.host = "itunes.apple.com"
        urlComponents.path = "/search"
        urlComponents.queryItems = parameters.map { (key: String, value: String) in
            URLQueryItem(name: key, value: value)
        }
        
        return urlComponents.url
    }
}

 

parameters에 있는 항목들을 수정해서 원하는 결과를 얻을 수 있다.

limit의 default는 50개다. 너무 많아서 줄여뒀고,

media를 써주지 않으면 음악, 영화, 뮤직비디오, 이북 등 모든 type의 정보를 가져온다.

이외에 다른 parameter는 아래를 참조하면 된다.

https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/