녕녀기의 실험일지

[ Python ] 공공 데이터 API 사용 본문

-- Data --/- Python -

[ Python ] 공공 데이터 API 사용

녕녀기 2023. 4. 25. 23:34

목차로

안녕하세요. 녀기입니다.

 

후 여러분 너무 빨리 왔죠?ㅋㅋㅋㅋㅋ

 

원래 바쁘다 바빠 현대 사회입니다!

 

(대한민국에서 이렇게 안 하면 살 수 없다구요😱)

 

급하게 돌아온 이유는

 

오늘 어쩌다 갑자기 

 

https://data.gg.go.kr/portal/mainPage.do

 

경기데이터드림

경기도의 모든 공공데이터를 개방합니다.

data.gg.go.kr

이 곳의 공공 데이터를 API를 통해 불러올 일이 있어서

 

분명 나중에 쓸 일이 있을텐데

 

복습과 필기를 해 놓을 겸 이렇게 노트북을 켰습니다.

 

그럼 시작하시죠!


목차

  1. 사용 데이터 및 인증키 발급
  2. API 요청 방법

1. 사용 데이터 및 인증키 발급

제가 사용한 데이터는 '경기데이터드림'의

 

경기도 발달 골목 상권 추정 매출 현황

 

자료 입니다.

 

일반적으로 다운받을 수 있는 데이터는 모르겠지만

 

API를 통해 요청 / 응답을 하기 위해서는 인증키를 발급받아야 하고,

 

키를 발급받으려면 회원가입 후 인증키를 발급받으시면 됩니다.

 

인증키를 발급 받으실 때는 데이터 사용 목적을 묻는대요.

 

저 같은 경우는 공부 목적이라고 썼습니다.

 

그리고 활용 URL을 입력하라고 나오는데

 

저는 제 블로그 주소를 넣었습니다.

 

블로그를 운영하고 계신 분이면 블로그 주소를 넣어주시면 되겠습니다.

 

 

Fig 1. '마이페이지'의 '인증키 발급'
Fig 2. 인증키 발급란

 

다른 기관에서는 인증키를 당일에 주지 않는 경우도 있는데,

 

경기데이터드림은 바로 발급이 되더라구요.

 

그게 좋았습니다.

 

 

2. API 요청 방법

보통 API 요청시, 요청 주소가 있습니다.

 

아래 Fig 3를 보면 요청 주소가 있죠.

 

그리고 요청하고자 하는 정보를 이어서 써줍니다.

 

Fig 3. API 기본 인자
Fig 4. 응답시 출력값

 

보통 url 주소 + ?와 같은 형식으로 사용합니다.

 

예를 들어, url 주소가

 

http://horororok.com/abcde

 

와 같은 형식이고, json 타입으로 불러오고 싶다면

 

http://horororok.com/abcde?Type=json 과 같은 형태로 쓸 수 있고,

 

응답을 json 형식으로 반환할 것 입니다.

 

Python 코드로 작성하면 이런 느낌입니다.

 

import requests
import json
import pprint
from urllib.parse import urlencode, unquote, quote_plus

serviceKey = "Service Key"
serviceKeyDecoded = unquote(serviceKey, 'UTF-8')

def check_api3():
    url = "https://openapi.gg.go.kr/TBGGESTDEVALLSTM"
    returnType="json"
    Pindex = 1
    Psize = 1000


    queryParams = '?' + urlencode({ quote_plus("KEY") : serviceKeyDecoded,
                                       quote_plus("Type") : returnType, 
                                       quote_plus("pIndex") : Pindex,
                                       quote_plus("pSize") : Psize})
        
    res = requests.get(url + queryParams)

    contents = res.text

    json_ob = json.loads(contents)

    
    return json_ob

 

urllib 라이브러리는 인터넷 리소스, URL를 가져오기 위한 라이브러리 입니다.

 

unquote 메소드는 url decode를 위해 사용하며, 위 코드의 'UTF-8'은 encoding 파라미터 값 입니다(encoding='UTF-8').

 

urlencode는 한글이 포함된 쿼리 파라미터를 인코딩하는 메소드입니다.

 

쿼리 파라미터에 한글을 지원할 때도 있지만 아닐 때도 있으니 사용했습니다.

 

urlencode의 파라미터를 dictionary 형태로 사용했다고 가정합시다.

 

{key1 : value1, key2 : value2}

 

urlencode의 dict 타입의 파라미터는 key1=value1&key2=value2와 같은 의미로 인코딩을 진행합니다.

 

변수 queryParams는 

 

?KEY=59cd693c8c047&Type=json&pIndex=1&pSize=1000 같은 형식으로 출력이 됩니다.

 

 

 

requests 라이브러리는 API를 호출할 때 사용하는 라이브러리 입니다.

 

requests.get()은 get 방식으로 불러오겠다는 것 입니다.

 

requests의 text 메소드는 수신한 byte단위의 데이터를 자동으로 decode 하여 사용자가 보기 좋게 만들어주죠.

 

 

jsonloads 메소드는 json 객체를 Python 객체로 바꿔줍니다.

 

Fig 5. API 응답 시 결과

 

위 Fig 5처럼 json 형태를 pprint 라이브러리의 pprint 메소드를 사용해 보기 좋게 출력했습니다.

 

한 페이지당 1000개의 데이터를 요청했는데

 

1000개의 데이터를 잘 받은 것 같습니다.


오랜만에 정리하니까 뭔가 머리 속에 들어오는 느낌이네요.

 

사람이 역시 복습이 중요한 것 같습니다.

 

Python 코드에 대한 포스팅도 꾸준히 해야 할 것 같아요👍

 

그럼 저는 힘들어서 이만 가볼게요~~

 

다음에 봐용💕

 

뿅!

Comments