웹 API로 데이터 추출하기
* 웹 API
웹 API는 어떤 사이트가 가지고 있는 기능을 외부에서도 쉽게 사용할 수 있게 공개한 것을 의미합니다.
원래 API(Application Programming Interface)는 어떤 프로그램 기능을 외부의 프로그램에서 호출해서 사용할 수 있게 만들 것을 의미 합니다.
간단하게 서로 다른 프로그램의 기능을 공유할 수 있게 절차와 규약을 정의한 것입니다.
일반적으로 HTTP 통싞을 사용하는데, 클라이언트 프로그램은 API를 제공하는 서버에 HTTP 요청을 보내면, 서버에서는 XML 또는 JSON 형식 등으로 응답합니다.
* OpenWeatherMap의 날씨 정보
전 세계의 모든 날씨 정보 등을 가지고 있는 OpenWeatherMap을 사용해서 서울, 도쿄, New York 의 날씨 정보를 구해보자
* OpenWeatherMap을 사용하려면 개발자 등록을 하고, API 키를 발급받아야 합니다.
* OpenWeatherMap은 기본적으로 유료 API이지만 현재 날씨, 5일까지의 날씨는 무료로 사용할 수 있습니다. 단, 무료로 사용할 때에는 1분에 60번만 호출할 수 있습니다.
* OpenWeatherMap
import requests
import json
# API 키를 지정합니다. [자신의 키로 변경해서 사용]
apikey =""
# 날씨를 확인할 도시 지정하기
cities = ["Seoul,KR", "Tokyo,JP", "New York,US"]
# API 지정
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
# 켈빈 온도를 섭씨 온도로 변환하는 함수
k2c = lambda k:k - 273.15
# 각 도시의 정보 추출하기
for name in cities:
# API의 URL 구성하기
url = api.format(city=name, key=apikey)
# API에 요청을 보내 데이터 추출하기
r = requests.get(url)
# 결과를 JSON형식으로 변환하기
data = json.loads(r.text)
# 결과 출력하기
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("")
* 공공 데이터
* 오픈 API
최근 많은 나라에서 정부 기관이 보유한 공공 데이터를 일반에 공개해 누구나 정부 기관의 데이터에 쉽고 편하게 접근할 수 있게 되었다.
대한민국 정부에서도 공공 데이터 포털(https://www.data.go.kr)을 통해 정부의 각 부처 및 산하기관에서 발행한 다양한 공공 데이터를 공개하고 있다.
이런 공공 데이터는 개별 파일로 제공되어 다운로드해서 이용할 수도 있고, 웹API (오픈 API)를 이용해 가져올 수도 있다. 단 웹API를 이용하려면 회원 가입을 해야 한다.
공공 데이터 포털을 이용하면 하나의 ID와 API 키로 각부처나 기관에서 제공 하는 다양한 웹 API를 이용할 수 있어서 편리하다.
공공 데이터 포털의 [활용 사례]를 클릭하면 오픈 API를 이용해 만든 다양한 애플리케이션을 살펴볼 수 있다.
공공 데이터 포털의 오픈 API를 이용하면 국내 관광 정보, 부동산 시세정보, 날씨 정보, 대기 오염 정보, 대중 교통 정보 등 방대한 양의 데이터를 실시갂 으로 가져와서 응용 프로그램 제작에 활용할 수 있다.
'python' 카테고리의 다른 글
Python 변수 (0) | 2020.09.29 |
---|---|
python 가상환경(pyenv) (0) | 2020.06.12 |
crawling and scraping (0) | 2020.02.20 |
google API(지도활용) (0) | 2020.02.20 |
wordcloud (0) | 2020.02.18 |