Ubermensch
Web API로 데이터 추출하기 - OpenWeatherMap 본문
'파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문 - 쿠지라 히코우즈쿠에 지음/ 윤인성 옮김' 책을 토대로 작성하였습니다.
웹 API : 어떤 사이트가 가지고 있는 기능을 외부에서도 쉽게 사용할 수 있게 공개한 것
웹 API는 일반적으로 HTTP 통신을 사용하는데, 클라이언트 프로그램은 API를 제공하는 서버에 HTTP요청을 보낸다.
그러면 서버가 이러한 요청을 기반으로 XML 혹은 JSON 형식 등으로 응답한다.
클라이언트 → 서버 → 클라이언트
(HTTP 요청) (HTTP 응답)
1. OpenWeatherMap 사이트의 날씨정보 API 발급받기
OpenWeatherMap?
전 세계의 모든 날씨 정보 등을 가지고있다.
기본적으로 유료 API 이지만, 현재 날씨, 5일까지의 날씨는 무료로 사용할 수 있다. * 무료 사용시에는 1분에 60번만 호출 가능
- 홈페이지에 들어가 가입한다.
- 상단 API keys Tab을 선택해, 본인의 API Key 값을 확인한다.
2. API를 사용해 세계 각 지역의 날씨를 가져오는 프로그램을 만든다
*소스코드는 책에서 제공
import requests
import json
# API 키를 지정합니다. 자신의 키로 변경해서 사용해주세요. --- (※1)
apikey = "474d59dd890c4108f62f192e0c6fce01"
# 날씨를 확인할 도시 지정하기 --- (※2)
cities = ["Seoul,KR", "Tokyo,JP", "New York,US"]
# API 지정 --- (※3)
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
# 켈빈 온도를 섭씨 온도로 변환하는 함수 --- (※4)
k2c = lambda k: k - 273.15
# 각 도시의 정보 추출하기 --- (※5)
for name in cities:
# API의 URL 구성하기 --- (※6)
url = api.format(city=name, key=apikey)
# API에 요청을 보내 데이터 추출하기
r = requests.get(url)
# 결과를 JSON 형식으로 변환하기 --- (※7)
data = json.loads(r.text)
# 결과 출력하기 --- (※8)
print("+ 도시 =", data["name"])
print("| 날씨 =", data["weather"][0]["description"])
print("| 최저 기온 =", k2c(data["main"]["temp_min"]))
print("| 최고 기온 =", k2c(data["main"]["temp_max"]))
print("| 습도 =", data["main"]["humidity"])
print("| 기압 =", data["main"]["pressure"])
print("| 풍향 =", data["wind"]["deg"])
print("| 풍속 =", data["wind"]["speed"])
print("")
※1 : OpenWeatherMap 사이트에서 발급받은 본인의 API Key를 입력한다.
※2 : 날짜를 확인할 도시를 지정한다.
다른 도시를 가져오고 싶다면, 아래의 URL 파일을 받아 확인 할 수 있다.
- 아래 URL 접근
http://bulk.openweathermap.org/sample/
- city.list.json.gz 파일 클릭 후 다운
※3 : api 변수에 API의 기본적인 형태를 지정한다.
매개변수 q에 ※2에서 넣은 도시이름, APPID 에 ※1에서 입력한 본인의 API Key를 입력한다.
*여기서 바로 입력이 되는 것이 아니라, 형식만을 지정해 주는 것이다.
실제 매개변수에 다른 문자열이 대체되도록 수행하는 부분은 ※6이다.
※4 : lambda식을 이용하여 k2c라는 함수를 정의한다.
OpenWeatherMap API에서 제공하는 기온 데이터는 켈빈온도(절대온도)다. 1
켈빈온도에서 우리나라에서 쓰는 섭씨온도로 변환하기 위해 273.15를 빼준다.
※5 : for문을 이용하여 각 도시의 기온을 추출한다.
※6 : API로 요청할 URL을 만들고, 다음줄에서 요청을 전송한 뒤 결과를 얻는다.
※7 : 웹 API의 결과는 JSON 형식이다. 따라서 json.loads() 메소드를 이용해 JSON형태의 데이터를 파이썬 형태로 변환한다.
- 온도의 국제단위로 단위는 K이다. 이상기체의 부피가 0이되는 온도. 섭씨 0도는 273.15K 이다. [본문으로]
'ML&DL' 카테고리의 다른 글
Using Machine Learning to Predict the Weather 1 (0) | 2018.11.20 |
---|