Open API
by seolbluewings
오픈 API를 알기 위해서 먼저 API에 대해 알아야 한다. API는 Application Programming Interface의 줄임말이다. Application Program은 말그대로 응용 프로그램이고 결국 API의 의미를 알기 위해서는 I에 해당하는 단어 인터페이스(Interface)란 말을 이해해야 한다.
인터페이스란 데이터를 주고받기 위한 방법을 정의내린 것이다. 데이터를 주고 받기위해 데이터 요청과정에 대한 규격, 데이터 수신에 대한 규격을 정하는 것이 인터페이스가 되겠다. 따라서 API는 응용 프로그램에 사용하기 위해 데이터를 주고받는 형식을 정한 것이 되며 그 중에서도 오픈 API는 누구나 데이터 접근이 가능하도록 공개처리 되어있는 API를 의미한다.
오픈 API를 이용하여 우리는 정부기관 또는 지자체 등에서 제공하는 공공데이터를 조회할 수 있으며, 구글, 네이버, 카카오 등에서 공개하는 데이터 역시 확보할 수 있다.
오픈 API 활용한 데이터 로딩
오픈 API를 통해 데이터를 조회하기 위해서는 우선 인증키 발급이 필요하다. 일반적으로 인증키는 오픈 API 서비스를 제공하는 사이트 회원가입을 통해 부여받을 수 있다.
서울시열린데이터광장에서 서울시의 코로나19 확진자 현황 데이터를 조회하는 상황을 가정하자. 서울시 코로나19 확진자 현황 링크에 접속하면 하단의 미리보기에서 [Open API]를 클릭할 수 있다.
여기서 우리는 오픈 API로 데이터를 불러오기 위해 만들어야할 URL 형식을 확인할 수 있다. 앞서 오픈 API는 데이터 요청에 대한 규격을 정의하는 것이라고 하였다. 따라서 오픈 API를 통해 데이터를 요청하는 과정에서 URL과 동일한 양식을 바탕으로 데이터를 요청해야만 한다.
서울시 코로나19 확진자 현황 데이터를 호출하기 위해 필요한 parameter 값은 서울시 코로나19 확진자 현황 링크에서 다음의 표를 통해 확인 가능하다.
변수명 | 타입 | 변수설명 | 값설명 |
---|---|---|---|
KEY | String(필수) | 인증키 | OpenAPI 인증키 |
TYPE | String(필수) | 요청파일타입 | xml, xls, json중 1개 |
SERVICE | String(필수) | 서비스명 | Corona19Status |
START_INDEX | INTEGER(필수) | 요청시작위치 | 데이터행 시작번호 |
END_INDEX | INTEGER(필수) | 요청종료위치 | 데이터행 끝번호 |
CORONA19_DISPLAY_YN | String(선택) | 노출여부 |
URL에 포함시켜야할 parameter는 필수값과 선택값으로 구분되어 있다. API로 데이터 호출 시, 필수값을 포함하지 않으면 에러가 발생하며 parameter는 URL에서 순서에 맞게 배치되어야 한다. 필수 값에 대해 각 parameter가 어떠한 역할을 수행하는지 알아보면 다음과 같다.
- 첫번째 parameter인 ‘KEY’는 오픈 API 서비스를 제공하는 사이트에서 사용자에게 발급해준 인증키를 의미한다. 개인마다 인증키 값은 상이하다.
- 두번째 parameter인 ‘TYPE’은 어떠한 형태로 데이터 파일을 불러올 것인가? 를 결정짓기 위해 사용되는 인자다. 일반적으로 key-value 형태로 매칭이 되어있는 .json 파일을 많이 사용해 이번 포스팅에서는 .json으로 선택할 것이다.
- 세번째 parameter인 ‘SERVICE’는 해당 데이터에 부여된 서비스명으로 [서울시 코로나19 확진자 현황]에 대한 서비스명은 ‘Corona19Status’ 이다. 즉, 데이터마다 서비스명 코드가 다르게 부여되어 있다.
- 네번째, 다섯번째 parameter는 데이터를 몇번째 행부터 몇번째 행까지 불러올 것인가를 결정짓기 위해 사용된다.
각 parameter는 각자의 역할이 있다. KEY는 내가 이 데이터를 가져갈 수 있는 권한이 있는 사람임을 인증하기 위해 사용되며, TYPE은 어떠한 형태로 데이터를 가져갈 것인지를 결정지어주고, SERVICE는 수많은 데이터들 중에서 어떠한 데이터를 가져갈지 특정 지어준다. 그리고 START_INDEX, END_INDEX는 선택한 데이터에서 몇번째 줄에 있는 데이터를 가져올지 결정짓는다.
공공데이터를 제공하는 곳에서는 친절하게 URL 작성 예시도 올려놓아준다. 아래의 URL 코드는 인증키를 통해 [서울시 코로나19 확진자 현황] 데이터를 .json 파일의 형태로 1~5행을 가져오겠다는 의미다.
api_key = '637766762475a576d65545273656f3'
url = 'http://openapi.seoul.go.kr:8088/{}/json/Corona19Status/1/5/'.format(api_key)
URL을 완성짓는다고 해서 데이터를 우리가 즉시 사용할 수 있다고 말하기는 어렵다. 결과값으로 받게 되는 json 파일은 key-value가 매칭되어 있는 형태로 되어 있다. 이를 즉시 활용하기 어렵기 때문에 우리는 이 key-value 매칭 형태를 엑셀처럼 익숙한 형태로 바꿔줘야 한다.
인증키를 통해 데이터를 불러온 결과는 dict 타입의 데이터이며, 여기서 RESULT 부분의 값을 통해 우리는 코드가 정상적으로 작동했는지 확인 가능하다. RESULT 부분에서 CODE : INFO-000 값이 존재한다면 해당 API가 정상적으로 작동했다는 의미로 받아들이면 된다.
‘row’ 부분에서부터 우리는 key-value 형태로 매칭되어 저장된 데이터를 확인할 수 있다. 각 값에 접근하기 위해서 대괄호를 활용하면 된다. 만약 [서울시 코로나19 확진자 현황]의 첫번째 행 결과를 보고 싶으면 아래와 같은 코드를 입력하면 된다.
dt = requests.get(url).json()
print(dt['Corona19Status']['row'][0])
인증키와 서비스코드를 input으로 받는 Open API 호출 함수를 작성하면 다음과 같은 형태일 것이다.
def seoul_op_api_dt(url, service_code):
dt = None
try:
dt_dict = requests.get(url).json()
dt_result = dt_dict[service_code]
code = dt_result['RESULT']['CODE']
if code == 'INFO-000':
dt = dt_result['row']
except:
pass
return dt
이 형태의 함수를 기억해두고 있다가 상황에 따라 URL과 서비스코드만 바꿔주면 범용적으로 활용이 가능하다.
오픈 API를 활용해 [서울시 코로나19 확진자 현황] 데이터를 가져오는 과정은 다음의 파이썬 코드를 통해 확인 가능하다.
참조 문헌
Subscribe via RSS