파이썬 공공데이터포털 API 연동하기 - JSON 사용

오늘은 파이썬으로 공공데이터포털 API와 연동하는 방법을 알아보겠습니다.

오늘 이야기를 하기 전에 먼저 API가 무엇인지부터 알아보도록 하겠습니다.

API(application programming interface)란?

API는 말그대로 컴퓨터와 컴퓨터간을 연결해주는 인터페이스입니다.

즉 우리가 영수증을 보면 아래처럼 

판매처, 날짜, 금액, 거래유형, 이용카드 등의 규격에 맞춰서 표현해주기 때문에

누구든지 이 영수증을 보고 동일한 것으로 이해하게 됩니다.

이러한 영수증 양식에 누군가는 달러로 쓰고, 또 일자를 단군력 등을 사용한다면 소통하기 어려울 것입니다.

그래서 서로 소통하기 편하게 다른 컴퓨터간 데이터를 송수신할때 정한 규격을 API라고 합니다.

API(application programming interface 애플리케이션 프로그래밍 인터페이스[*], 응용 프로그램 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.[1] 이러한 연결이나 인터페이스를 빌드하거나 사용하는 방법을 기술하는 문서나 표준은 API 사양으로 부른다. 이 표준을 충족하는 컴퓨터 시스템은 API가 구현(implement)되었다거나 노출(expose)되었다고 말한다. API라는 용어는 사양이나 구현체를 의미할 수 있다.
컴퓨터와 인간을 연결시키는 사용자 인터페이스와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다.

이 API는 4가지 종류로 나뉘는데요.

요즘에는 대부분 REST API 방식으로 연동합니다.

  • SOAP API 
    이 API는 단순 객체 접근 프로토콜을 사용합니다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환합니다. 과거에 더 많이 사용되었으며 유연성이 떨어지는 API입니다.
  • RPC API
    이 API를 원격 프로시저 호출이라고 합니다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송합니다.
  • Websocket API
    Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적입니다.
  • REST API
    오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다. 클라이언트가 서버에 요청을 데이터로 전송합니다. 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환합니다. 

SOAP방식과 REST 방식의 차이는 아래 잘 정리된 이미지가 있어서 첨부합니다.

일반적으로 REST는 내용을 다 볼 수 있는 엽서라고 표현하고, 

SOAP방식은 규격을 갖춘 봉투에 넣어서 보내는 방식이라 많이 비유하고 있습니다.

API 설명

python API 연동해보기

그럼 실제로 파이썬에서 API를 한번 연동해보겠습니다.

웹에서 자료를 받아야 하기 때문에 requests 라이브러리가 필요합니다.

pip install requests

그리고 공공 데이터 포탈에서 교통사고 다발지역 정보 조회라는 API로 테스트를 해보겠습니다.

공공 데이터 포털에서 미리보기를 누르시면 데이터 샘플을 볼수 있는데요.

ServiceKey에 발급 받은 인증키만 넣으면 자동으로 볼 수 있습니다.

미리보기를 누르면 아래처럼 JSON값으로 받아오는 것을 알 수 있는데요.

이 때 type을 JSON으로 변경해주셔야 합니다.

웹페이지에서는 정상적으로 접근이 되나 파이썬으로 저속하면 아래와 같은 에러가 납니다. 

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 

certificate verify failed: unable to get local issuer certificate (_ssl.c:997)

구글로 서치해보니 SSL 인증서가 없는 경우에 나오는 메시지라고 하는데요.

certifi를 업데이트하면된다고 하네요. 

pip install --upgrade certifi

하지만 이방법도 통하지 않습니다.

하지만 requests.get(url, verify=False)를 넣어주자 동작합니다.

여전히 Warning 메시지는 뜨지만 json 값은 정상적으로 가져온 것을 알수 있습니다.

이렇게 파이썬을 통해서 자료를 가져올수 있습니다.

이후 Json구조를 봐야지 원하는 데이터를 가져올 수 있는데요.

먼저 불러온 값을 복사해서 온라인에 존재하는 사이트 등에서 좀더 이쁘게 Json파일을 볼 수 있습니다.

 

Json Parser Online

 

json.parser.online.fr

사이트의 도움을 받아 구조를 살펴보면

JSON 구조가 ITEMS아래에 한번더 item 아래에 데이터가 있는것을 확인할 수 있는데요.

파이썬 코드를 통해서 data['items']['item']을 통해 선택하고

data = json.loads(contents)
stat = data['items']['item']
print(type(stat))

이제 판다스를 통해서 Json_normalize를 합니다.

import pandas as pd
from pandas import json_normalize

df = json_normalize(stat)
print(df)

그리고 그 정보를 df.info()해서 보면 아래와 같이 나오는 것을 확인할 수 있습니다.

이제 원하는 데이터를 저장하시거나, DB에 넣으시면 됩니다.

간단하게 파이썬을 이용해서 공공데이터 포털에서 API 연동을 통해 원하는 자료를 가져오고,

이를 판다스를 통해서 데이터베이스화 하는 것을 알아보았는데요.

API가 필요할때 잘 사용하시기 바랍니다.