IT/Python

[Python] 공공데이터포털 OpenAPI 사용하기

돔녕 2025. 2. 11. 00:53

공공 데이터 활용 공모전을 준비하는 중, OpenAPI를 사용하게 되었다. 

먼저 이번 포스팅에는 OpenAPI를 사용하는 방법을 정리하고, 그 후에 데이터베이스에 저장하는 방법을 정리해보려고 한다. 


예시로 사용할 데이터

https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15095066

페이지에  공유된 샘플 코드

# Python3 샘플 코드 #


import requests

url = 'http://apis.data.go.kr/B551177/PassengerNoticeKR/getfPassengerNoticeIKR'
params ={'serviceKey' : '서비스키', 'selectdate' : '0', 'type' : 'xml' }

response = requests.get(url, params=params)
print(response.content)

 

 

데이터 명세

요청 메시지 명세

항목명(영문) 항목명(국문) 항목크기 항목구분 샘플데이터 항목설명
selectdate 일자선택 1 0 0 오늘일자(D) ='0', 내일일자(D+1) ='1', default = 0
type 응답유형 4 0 xml 응답유형 [xml, json] default=xml
serviceKey 서비스키 100 1 - 공공데이터포털에서 받은 인증키

※ 항목구분: 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)

 

 응답 메시지 명세

항목명(영문) 항목명(국문) 항목크기 항목구분 샘플데이터 항목설명
adate 표출일자 10 0 20211130 표출일자(YYYYMMDD)
atime 시간대 10 0 07_08 시간대 표시(HH_HH)
*1시간 간격
t1sum1 T1 입국장(A,B) 10 0 230.0 승객예고 T1 입국장(A,B) 현황(인원 수)
t1sum2 T1 입국장(E,F) 10 0 168.0 승객예고 T1 입국장(E,F) 현황(인원 수)
t1sum3 T1 입국장(C) 10 0 103.0 승객예고 T1 입국장(C) 현황(인원 수)
t1sum4 T1 입국장(D) 10 0 104.0 승객예고 T1 입국장(D) 현황(인원 수)
t1sumset1 T1 입국장 합계 10 0 605.0 승객예고 T1 입국장 합계(인원 수)
t1sum5 T1 출국장(1,2) 10 0 244.0 승객예고 T1 출국장(1,2) 현황(인원 수)
t1sum6 T1 출국장(3) 10 0 147.0 승객예고 T1 출국장(3) 현황(인원 수)
t1sum7 T1 출국장(4) 10 0 189.0 승객예고 T1 출국장(4) 현황(인원 수)
t1sum8 T1 출국장(5,6) 10 0 250.0 승객예고 T1 출국장(5,6) 현황(인원 수)
t1sumset2 T1 출국장 합계 10 0 830.0 승객예고 T1 출국장 합계(인원 수)
t2sum1 T2 입국장(A) 10 0 0.0 승객예고 T2 입국장(A) 현황(인원 수)
t2sum2 T2 입국장(B) 10 0 0.0 승객예고 T2 입국장(B) 현황(인원 수)
t2sumset1 T2 입국장 합계 10 0 0.0 승객예고 T2 입국장 합계(인원 수)
t2sum3 T2 출국장(1) 10 0 0.0 승객예고 T2 출국장(1) 현황(인원 수)
t2sum4 T2 출국장(2) 10 0 0.0 승객예고 T2 출국장(2) 현황(인원 수)
t2sumset2 T2 출국장 합계 10 0 0.0 승객예고 T2 출국장 합계(인원 수)
resultCode 결과코드 10 1 00 결과코드
resultMsg 결과메시지 20 1 NORMAL SERVICE. 결과메시지

※ 항목구분: 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)

 


우선 데이터를 사용하기 위해서는 활용신청을 해야한다!

 

 

활용신청 후 마이페이지에 들어가면 본인의 인증키를 확인할 수 있다. 

 


Postman으로 호출 확인하기

1. RestAPI 확인

활용가이드 문서에 있는 Rest(URL)

http://apis.data.go.kr/B551177/PassengerNoticeKR/getfPassengerNoticeIKR?serviceKey=인증키&selectdate=0&type=xml

인증키 부분에 마이페이지 -> 개인 API 인증키 -> 인코딩된 인증키 복사해서 넣기

selectdate와 type 항목은 위의 요청 메시지 명세에 따라 원하는 데이터를 지정할 수 있다.

 

2. Postman 접속

New Request 클릭

GET 주소에 확인한 URL을 붙여넣기 한 후 Send 클릭

다음과 같이 결과가 나오게 된다.

  • 우측 창에서 Status: 200OK 확인
  • Body 탭에서 응답 형식 변경하여 확인 가능

 

 


Python으로 확인하기

jupyter notebook을 사용하여 확인했다.

# 모듈 불러오기
import json            
import requests             
import pandas as pd
# 본인의 인증키 입력
serviceKey = "본인의 인증키"
url = "openapi url 입력" 

# 요청 파라미터
params = {
    'selectdate': '0',  
    'type': 'json',  
    'serviceKey': serviceKey  
}

# API 요청
response = requests.get(url, params=params)

# 응답 상태 확인
print(f"Status Code: {response.status_code}")

응답 상태를 확인했을 때, Status Code: 200 이 나온다면 정상이다.

 

⭐️ 요청 파라미터는 데이터에 따라 가이드 문서를 확인하여 변경해주어야 한다.

 

 

데이터 확인

data = response.json() 

items = data.get('response', {}).get('body', {}).get('items', None)
    
if items:
    df = pd.DataFrame(items)  
    print(df.head())  
else:
    print("no items in the response.")

 

이후 원하는 용도에 따라 저장하면 된다.

'IT > Python' 카테고리의 다른 글

[Python] Iterator와 Generator  (0) 2025.04.03