본문 바로가기
공부/파이썬 Python

Weather API 튜토리얼 (날씨 정보 API)

by 혼밥맨 2022. 4. 1.
반응형

Weather API 튜토리얼 (날씨 정보 API)

 

날씨 정보를 API로 호출해서 도시 별 구체적인 실시간 날씨 정보를 알아보자. 

 

Website

http://api.openweathermap.org

 

Weather API - OpenWeatherMap

Please, sign up to use our fast and easy-to-work weather APIs for free. In case your requirements go beyond our freemium account conditions, you may check the entire list of our subscription plans. You can read the How to Start guide and enjoy using our po

openweathermap.org

api.openweathermap.org 회원가입하면 기본 Weather API는 무료로 호출 가능하다. 일정 사용량을 초과하면 초과 비용이 발생하는 모양이다. 그리고 기업 회원, 일반 개인 회원 구독 비용 차이가 있다. 

삼성 갤럭시, 애플 아이폰에서 날씨 정보를 부를 때 특정 API를 부르는 것으로 알고 있는데, 날씨 정보 서비스를 제공하기 위해서 API를 구독하는 모양이다. 

 

Libraries

1
2
3
# pip install requests
import datetime as dt
import requests
cs

 

켈빈온도 - 셀시우스/파렌하이트

켈빈 절대 온도를 섭씨 (셀시우스, celsius), 화씨 (파렌하이트, fahrenheit)로 변환하는 메소드를 작성하자.

1
2
3
4
def kelvin_to_celsius_fahrenheit(kelvin):
    celsius = kelvin - 273.15
    fahrenheit = celsius * (9/5) + 32
    return celsius, fahrenheit
cs

리턴 밸류가 2개이니까 값을 받을 때 변수 2개가 있어야 한다. 리턴 밸류가 두 개인 것이 불편하면, 켈빈 - 셀시우스, 켈빈 - 파렌하이트 두 개의 메소드를 각각 작성하면 된다.

 

호출 Call

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
url = BASE_URL + "appid=" + API_KEY + "&q=" + CITY
response = requests.get(url).json()
 
print(response)
#{'coord': {'lon': -0.1257, 'lat': 51.5085}, 'weather': [{'id': 803, 'main': 'Clouds', 'description': 'broken clouds', 'icon': '04d'}], 'base': 'stations', 'main': {'temp': 290.01, 'feels_like': 288.87, 'temp_min': 288.1, 'temp_max': 291.58, 'pressure': 1031, 'humidity': 43}, 'visibility': 10000, 'wind':  ...
 
temp_kelvin = response['main']['temp']
temp_celsius, temp_fahrenheit = kelvin_to_celsius_fahrenheit(temp_kelvin)
feels_like_kelvin = response['main']['feels_like']
feels_like_celsius, feels_like_fahrenheit = kelvin_to_celsius_fahrenheit(feel_like_kelvin)
wind_speed = response['wind']['speed']
humidity =  response['main']['humidity']
description = response['weather'][0]['description']
sunrise_time = dt.datetime.utcfromtimestamp(response['sys']['sunrise'+ response['timezone'])
sunset_time = dt.datetime.utcfromtimestamp(response['sys']['sunset'+ response['timezone'])
cs

CITY 변수에 'New York'을 저장했다. 뉴욕 도시에 체감온도, 풍속, 습도, 온도 등등을 호출하자.

CITY 변수에 정확한 도시명을 저장해야 한다. 아니면, 오류 응답을 내뱉는다.
New York 날씨
Vienna 비엔나 날씨

Full Code

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# pip install requests
 
import datetime as dt
import requests
 
 
BASE_URL = "http://api.openweathermap.org/data/2.5/weather?"
API_KEY = "YOUR API KEY"
CITY = "London"
 
 
def kelvin_to_celsius_fahrenheit(kelvin):
    celsius = kelvin - 273.15
    fahrenheit = celsius * (9/5+ 32
    return celsius, fahrenheit
 
 
url = BASE_URL + "appid=" + API_KEY + "&q=" + CITY
response = requests.get(url).json()
 
print(response)
#{'coord': {'lon': -0.1257, 'lat': 51.5085}, 'weather': [{'id': 803, 'main': 'Clouds', 'description': 'broken clouds', 'icon': '04d'}], 'base': 'stations', 'main': {'temp': 290.01, 'feels_like': 288.87, 'temp_min': 288.1, 'temp_max': 291.58, 'pressure': 1031, 'humidity': 43}, 'visibility': 10000, 'wind':  ...
 
 
temp_kelvin = response['main']['temp']
temp_celsius, temp_fahrenheit = kelvin_to_celsius_fahrenheit(temp_kelvin)
feels_like_kelvin = response['main']['feels_like']
feels_like_celsius, feels_like_fahrenheit = kelvin_to_celsius_fahrenheit(feel_like_kelvin)
wind_speed = response['wind']['speed']
humidity =  response['main']['humidity']
description = response['weather'][0]['description']
sunrise_time = dt.datetime.utcfromtimestamp(response['sys']['sunrise'+ response['timezone'])
sunset_time = dt.datetime.utcfromtimestamp(response['sys']['sunset'+ response['timezone'])
 
print(f"Temperature in {CITY}: {temp_celsius:.2f}°C or {temp_fahrenheit:.2f}°F")
print(f"Temperature in {CITY}: feels like: {feels_like_celsius:.2f}°C or {feels_like_fahrenheit:.2f}°F")
print(f"Humidity in {CITY}: {humidity}%")
print(f"Wind Speed in {CITY}: {wind_speed}m/s")
print(f"General Weather in {CITY}: {description}")
print(f"Sun rises in {CITY} at {sunrise_time} local time.")
print(f"Sun sets in {CITY} at {sunset_time} local time.")
cs

오픈웨더 api로 날씨 정보 호출하기 끝

반응형

댓글