먼저 스위프트로 API를 갖고 오는 코드 구현
- URL 구조체 생성
URL은 옵셔널 바인딩 처리를 해야 한다.
주소는 아이튠즈 API 갖고 왔다.
guard let url = URL(string: "https://itunes.apple.com/search?&term=jazz") else {
print("Error: cannot create URL")
return
}
- URL 요청 생성
var request = URLRequest(url: url)
request.httpMethod = "GET"
- 요청을 가지고 작업 진행
위에서 생성한 request를 통해 dataTask(with: )을 통해 처리한다.
⭐️ 이 때 dataTask(with: )은 비동기 처리한다.
URLSession.shared.dataTask(with: request) { data, response, error in
// 에러가 없어야 넘어감
guard error == nil else {
print("Error: error calling GET")
print(error!)
return
}
// 옵셔널 바인딩
guard let safeData = data else {
print("Error: Did not receive data")
return
}
// HTTP 200번대 정상코드인 경우만 다음 코드로 넘어감
guard let response = response as? HTTPURLResponse, (200 ..< 299) ~= response.statusCode else {
print("Error: HTTP request failed")
return
}
// 원하는 모델이 있다면, JSONDecoder로 decode코드로 구현 ⭐️
print(String(decoding: safeData, as: UTF8.self))
}.resume() // 시작
▶️ 전체 코드
func getMethod() {
// URL구조체 만들기
guard let url = URL(string: "https://itunes.apple.com/search?term=jazz") else {
print("Error: cannot create URL")
return
}
// URL요청 생성
var request = URLRequest(url: url)
request.httpMethod = "GET"
// 요청을 가지고 작업세션시작
URLSession.shared.dataTask(with: request) { data, response, error in
// 에러가 없어야 넘어감
guard error == nil else {
print("Error: error calling GET")
print(error!)
return
}
// 옵셔널 바인딩
guard let safeData = data else {
print("Error: Did not receive data")
return
}
// HTTP 200번대 정상코드인 경우만 다음 코드로 넘어감
guard let response = response as? HTTPURLResponse, (200 ..< 299) ~= response.statusCode else {
print("Error: HTTP request failed")
return
}
// 원하는 모델이 있다면, JSONDecoder로 decode코드로 구현 ⭐️
print(String(decoding: safeData, as: UTF8.self))
}.resume() // 시작
}
위에서 처럼 보면 보기 어렵기 때문에
이 때 "Postman"이라는 어플을 사용하여 출력된 내용을 보기 쉽게 한다.
데이터 모델 구조를 확인하고,
이를 통해 재구성하기 위해서는 아래 사이트에 들어가서 조회한다.
아래 사이트 주소에 들어가서 Postman의 출력 결과를 붙여 넣기 하면
데이터 모델에 대해 알 수 있게 된다.
아래 코드는 위의 사이트 들어가서 출력된 JSON 파일에 대해
데이터 모델을 확인할 수 있다.
import Foundation
// MARK: - Welcome
struct Welcome: Codable {
let resultCount: Int
let results: [Result]
}
// MARK: - Result
struct Result: Codable {
let wrapperType: WrapperType
let artistID, collectionID: Int
let amgArtistID: Int?
let artistName, collectionName, collectionCensoredName: String
let artistViewURL, collectionViewURL: String
let artworkUrl60, artworkUrl100: String
let collectionPrice: Double
let collectionExplicitness: Explicitness
let trackCount: Int
let copyright: String?
let country: Country
let currency: Currency
let releaseDate: Date
let primaryGenreName: String
let previewURL: String
let description: String?
let kind: Kind?
let trackID: Int?
let trackName, trackCensoredName: String?
let trackViewURL: String?
let artworkUrl30: String?
let trackPrice: Double?
let trackExplicitness: Explicitness?
let discCount, discNumber, trackNumber, trackTimeMillis: Int?
let isStreamable: Bool?
let contentAdvisoryRating, shortDescription, longDescription, collectionArtistName: String?
let collectionArtistID: Int?
let collectionArtistViewURL: String?
enum CodingKeys: String, CodingKey {
case wrapperType
case artistID = "artistId"
case collectionID = "collectionId"
case amgArtistID = "amgArtistId"
case artistName, collectionName, collectionCensoredName
case artistViewURL = "artistViewUrl"
case collectionViewURL = "collectionViewUrl"
case artworkUrl60, artworkUrl100, collectionPrice, collectionExplicitness, trackCount, copyright, country, currency, releaseDate, primaryGenreName
case previewURL = "previewUrl"
case description, kind
case trackID = "trackId"
case trackName, trackCensoredName
case trackViewURL = "trackViewUrl"
case artworkUrl30, trackPrice, trackExplicitness, discCount, discNumber, trackNumber, trackTimeMillis, isStreamable, contentAdvisoryRating, shortDescription, longDescription, collectionArtistName
case collectionArtistID = "collectionArtistId"
case collectionArtistViewURL = "collectionArtistViewUrl"
}
}
enum Explicitness: String, Codable {
case explicit = "explicit"
case notExplicit = "notExplicit"
}
enum Country: String, Codable {
case usa = "USA"
}
enum Currency: String, Codable {
case usd = "USD"
}
enum Kind: String, Codable {
case song = "song"
case tvEpisode = "tv-episode"
}
enum WrapperType: String, Codable {
case audiobook = "audiobook"
case track = "track"
}
'UIKit > 기본' 카테고리의 다른 글
아이튠즈 API를 통해 영화 정보 얻어오기 (0) | 2024.04.26 |
---|---|
서치바로 원하는 검색어에 맞춰 공공 API 정보 얻어오기 (0) | 2024.04.20 |
Filemanager로 CRUD 해보기 (1) | 2024.04.04 |
네비게이션 바 + 탭 바 적용 (0) | 2024.03.29 |
Drawing Cycle (+ Layout Cycle) (0) | 2024.03.28 |