think deeply

[python] 공공데이터 포털 오픈API 형태 데이터 불러오기( feat. 서울 열린데이터 광장, 공공데이터 포털) 본문

KT AIVLE

[python] 공공데이터 포털 오픈API 형태 데이터 불러오기( feat. 서울 열린데이터 광장, 공공데이터 포털)

윌_ 2023. 2. 28. 00:34

오픈API

: 누구나 사용할 수 있도록 공개된 API


API

: Application Programming Interface(응용 프로그래밍 인터페이스)의 줄임말

프로그램 간의 소통을 위해 사전에 정의된 약속

 

* API의 맥락에서 Application

: 고유한 기능을 가진 모든 소프트웨어를 나타냄, 내가 만들었거나 남이 만들어둔 구글이나 네이버같은 서비스

 

* API의 맥락에서 Programming

: 파이썬이나 자바 같은 언어로 프로그램을 만드는 것을 의미

 

* API의 맥락에서 Interface

: 두 애플리케이션 간의 서비스 계약이라고 할 수 있음, 서로 간에 원활히 소통을 할 수 있도록 돕는 표준화된 약속


ui는 유저가 사용하라는 인터페이스

api는 개발자가 시스템 사용하라는 인터페이스


주요 오픈 API 사이트

서울 열린데이터 광장

공공데이터포털

문화데이터 광장

공간정보 오픈플랫폼


 서울 열린데이터광장 데이터 가져오기

실습 데이터: 서울시 지하철호선별 역별 승하차 인원 정보

 

https://data.seoul.go.kr/dataList/OA-12914/S/1/datasetView.do

 

'서울 열린 데이터 광장' 사이트에서 '서울시 지하철호선별 역별 승차차 인원 정보' 검색


1. 라이브러리
import pandas as pd 
import urllib.request # url을 가져오기 위한 파이썬 모듈
import json​

 

2. 가져올 데이터의 주소와 인증키
로그인 후 인증키 신청하고 인증키 발급
key = '797a5961526b6768374b6146f'  # 본인의 인증키 입력
start = 1  # 페이지 시작
end = 1000 # 페이지 끝

# 미리보기 > OpenAPI > 샘플 URL의 URL을 가져와서 다음과 같이 편집
url = f'http://openapi.seoul.go.kr:8088/{key}/json/CardSubwayStatsNew/{start}/{end}/20230211'

 

3. 데이터 가져오기
# 라이브러리를 활용해 브라우저에 주소를 쳤다고 가정해줄 수 있는 코드
response = urllib.request.urlopen(url) 

# 브라우저에서 주소창에 쳐서 응답받은 걸 받아오겠다
# 여기서 응답받은 것 tpye = str
json_str = response.read().decode('utf-8')

# 응답받은 것을 딕셔너리로 변환
# tpye = dict
json_object = json.loads(json_str)

# 데이터의 실제 로우들을 가져옴 : 파싱
# 위의 JSON 데이터에서 내가 필요한 행들만 df로 선언해주기
subway = pd.json_normalize(json_object['CardSubwayStatsNew']['row'])

#확인
subway.head()​

 

위에서 'CardSubwayStatsNew' , 'row'을 지정해주는 것은 json 데이터 형식보고 가져올 수 있다.

 

이에는 방법이 2가지 있다.

 

첫번째는 다음과 같이 예제를 보고 데이터 형식을 이해하고 작성하는 법.

(추천) 두번째는 예제 형식을 Ctrl + C, V해서

json파서(https://jsonformatter.org/json-parser)에 넣고 데이터 형식을 파악한 후 가져오는 방법이 있다.

이렇게 확인 가능


 

 

 

파서 개념도


공공데이터 포털 데이터 가져오기

공공데이터 포털은 활용하고자 하는 데이터 신청을 해야하고 

https://www.data.go.kr/iim/api/selectAPIAcountView.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

인증키도 데이터마다 다르기 때문에 마이페이지에서 인증키를 찾아서 활용해야한다


 

!pip install xmltodict # xml을 딕셔너리 형태로 변환하는 라이브러리

import xmltodict
import urllib.request 
import json 
import pandas as pd 

key = '%2BBA3rujPiFOfsje81LymKzWOXxsU%2F75gZU2QRnBm6g6RiJg%2Fe5IGaBCUbBEeYrF%2FV06oYDCnEvXmLeQ3J5eseA%3D%3D'
strtYymm = 202201
endYymm = 202212
cntyCd = ''

url = f'http://apis.data.go.kr/1220000/nationtrade/getNationtradeList?serviceKey={key}&strtYymm={strtYymm}&endYymm={endYymm}&cntyCd={cntyCd}'

response = urllib.request.urlopen(url) 
xml_parse = xmltodict.parse(response)
xml_dict = json.loads(json.dumps(xml_parse))
result = xml_dict['response']['body']['items']['item'] 

im_export = pd.json_normalize(result)

im_export

 


<참고>

https://www.opentutorials.org/course/3085/18887

 

UI vs API - 생활코딩

UI vs API 2017-12-02 16:25:56

www.opentutorials.org

https://www.youtube.com/watch?v=55FrHTNjTCc 

https://docs.python.org/ko/3/howto/urllib2.html

 

HOWTO Fetch Internet Resources Using The urllib Package

Author, Michael Foord,. Introduction: Related Articles: You may also find useful the following article on fetching web resources with Python: Basic Authentication A tutorial on Basic Authentication...

docs.python.org

 

Comments