반응형
Weather API 튜토리얼 (날씨 정보 API)
날씨 정보를 API로 호출해서 도시 별 구체적인 실시간 날씨 정보를 알아보자.
Website
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 변수에 정확한 도시명을 저장해야 한다. 아니면, 오류 응답을 내뱉는다.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로 날씨 정보 호출하기 끝
반응형
'공부 > 파이썬 Python' 카테고리의 다른 글
파이썬으로 자동 영상편집하기 (moviepy.editor) (5) | 2022.04.03 |
---|---|
파이썬으로 이미지 크롤링하기 (requests, selenium) (0) | 2022.04.03 |
[Python] 언제 은퇴할 수 있을까를 계산 (0) | 2022.03.27 |
블록체인의 기본 원리: 투명성(Transparency) with Python (0) | 2022.03.26 |
간단한 파이썬 멀티쓰레딩 예제들 (0) | 2022.03.25 |
댓글