Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

Ubermensch

Web API로 데이터 추출하기 - OpenWeatherMap 본문

ML&DL

Web API로 데이터 추출하기 - OpenWeatherMap

now.ubermensch 2018. 11. 20. 19:40

'파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문 - 쿠지라 히코우즈쿠에 지음/ 윤인성 옮김' 책을 토대로 작성하였습니다.


웹 API : 어떤 사이트가 가지고 있는 기능을 외부에서도 쉽게 사용할 수 있게 공개한 것

웹 API는 일반적으로 HTTP 통신을 사용하는데, 클라이언트 프로그램은 API를 제공하는 서버에 HTTP요청을 보낸다.

그러면 서버가 이러한 요청을 기반으로 XML 혹은 JSON 형식 등으로 응답한다.


 클라이언트    →          서버         →    클라이언트

             (HTTP 요청)              (HTTP 응답)




1. OpenWeatherMap 사이트의 날씨정보 API 발급받기


OpenWeatherMap?

전 세계의 모든 날씨 정보 등을 가지고있다. 

기본적으로 유료 API 이지만, 현재 날씨, 5일까지의 날씨는 무료로 사용할 수 있다. * 무료 사용시에는 1분에 60번만 호출 가능


    • 홈페이지에 들어가 가입한다.
https://home.openweathermap.org/users/sign_up
    • 상단 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형태의 데이터를 파이썬 형태로 변환한다.

  1. 온도의 국제단위로 단위는 K이다. 이상기체의 부피가 0이되는 온도. 섭씨 0도는 273.15K 이다. [본문으로]

'ML&DL' 카테고리의 다른 글

Using Machine Learning to Predict the Weather 1  (0) 2018.11.20