OpenWeather의 json 데이터를 사용해서 날씨 앱을 만들어 보자 !

OpenWeather_0

OpenWeather을 사용하여 각 도시별로 현재 기온, 5일간의 기온을 json 데이터 형식으로 가져와 사용할 수 있다.
그래서 ! 날씨 앱을 한번 만들어 보기로 했습니다 !
이번에 정리하는 것은 json 데이터를 가져와서 사용하는 방법 !!

url 세션 사용하기 !!

먼저 OpenWeather을 사용하기 위해선 가입을 한 후 API Key를 받아야 합니다 !
http://api.openweathermap.org/data/2.5/forecast?id={도시 명 입력}&APPID={API Key 입력 !}

위 url로 접속을하면 json 형식의 데이터들을 볼 수 있습니다 !
확인이 되면 이제 json 데이터를 가져 와볼까요 ?!

part.1

1
2
let apiUrl = "https://api.openweathermap.org/data/2.5/forecast?id=<#City Name#>&APPID=<#API Key#>"
let url = URL(string: apiUrl)!

먼저 접속하려하는 url을 url타입으로 변환 후 프로퍼티에 저장을 해둡니다 !

part.2

1
2
3
4
5
6
7
let dataTask = URLSession.shared.dataTask(with: url) { data, response, error in
guard error == nil else {return print(error!)}
guard let response = response as? HTTPURLResponse,
(200..<400).contains(response.statusCode)
else {return print ("Response Error")}
guard let data = data else { return }
dataTask.resume()

URLSession을 걸어주고 reponse, error을 통해 필터링을 한 후 data를 가지고 옵니다.
reponse를 200부터 400미만으로 준 이유는 해당 범위에 속하는 것은 http 상태코드의 정상범위에 속하기 때문입니다.

response : http 상태코드 확인.
error : data error 확인.

그리고 마지막으로 data를 가지고 옵니다 !

part.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
struct WeatherJSON: Codable {
let cod: String
let city: City
let list: [List]

struct List: Codable {
let dt: Int
let dt_txt: String
let main: Main
let weather: [Weather]
}

struct Main: Codable {
let temp: Double
let temp_min: Double
let temp_max: Double
}
struct Weather: Codable {
let description: String
let icon: String
}
struct City: Codable {
let name: String
}
}

저는 Coadble를 사용하였기 떄문에 받고자 하는 데이터에 맞게 struct를 생성 해두었습니다

1
2
let jsonDecoder = JSONDecoder()
let weatherData = try? jsonDecoder.decode(WeatherJSON.self, from: data)

그리고 URLSession으로 받은 data를 jsonDecoder로 Parsing을 합니다 !

참고. json 데이터 받은 것을 기온으로 표시하고 싶다면 아래 공식으로 해주시면 됩니다.

1
String(format: "%.1f", temperature - 273.15) + "°"

이후 View에 넣고싶은 위치에 데이터를 넣어주면 됩니다.
저는 TableView를 사용해서 만들었습니다 ㅎㅎㅎ

영상

OpenWeather_0