반응형
공공데이터 API 연동을 통해 데이터를 분석하려고 하는데,
시작부터 막혀서 잘 안되는 경우가 있었습니다.
다른거보다 많이 올라와 있는 샘플코드들이 Python 2.x인 경우가 많아서 업데이트가 필요해 보입니다.
# Python 2.x 샘플 코드 #
from urllib2 import Request, urlopen
from urllib import urlencode, quote_plus
url = 'http://apis.data.go.kr/B552584/RfidFoodWasteServiceNew/getTotalTimeList'
queryParams = '?' + urlencode({ quote_plus('ServiceKey') : '서비스키', quote_plus('type') : 'xml', quote_plus('disYear') : '2020', quote_plus('disMonth') : '06', quote_plus('page') : '1', quote_plus('rowNum') : '10' })
request = Request(url + queryParams)
request.get_method = lambda: 'GET'
response_body = urlopen(request).read()
print response_body
공공데이터 포털 중에서 한국환경공단_음식물쓰레기 배출정보에 대한 샘플코드인데, 그래도 진행해보면 실행이 되지 않습니다.
그래서 코드를 좀 정리할 필요가 있습니다. Python 3.x에 맞도록 수정해봤습니다.
우선 requests는 install이 필요합니다. C://와 가상환경(venv)에 모두 설치되었는지 확인합니다.
pip install requests
import requests as rq
import urllib.parse as parse
url = "http://apis.data.go.kr/B552584/RfidFoodWasteServiceNew/getTotalTimeList"
service_key = "서비스키"
queryParams = '?' + parse.urlencode({ parse.quote_plus('ServiceKey') : '서비스키',
parse.quote_plus('type') : 'xml',
parse.quote_plus('disYear') : '2020',
parse.quote_plus('disMonth') : '06',
parse.quote_plus('page') : '1',
parse.quote_plus('rowNum') : '10' })
res = rq.get(url, queryParams)
print(res)
urllib와 urllib2는 urllib로 통합되었습니다.
urlencode와 quote_plus는 urllib.parse에 포함되어 있습니다.
공공데이터 API의 기본원리는 해당 url로 서비스키(encode) + 변수를 request하면 response로 특정 값이 전송되는 방식입니다.
python에서 작동시켜면
<Response [200]>이 오면 정상이고
[404]가 오면 error 입니다.
반응형
'데이터과학 > Python' 카테고리의 다른 글
[Pandas 기초] SPYDER IDE 설치 및 개발 환경 시작하기 (0) | 2021.10.21 |
---|---|
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 190: illegal multibyte sequence [python error] (0) | 2021.10.21 |
ImportError: No module named requests [Python 오늘의 에러] (1) | 2021.05.06 |
[Python 오늘의 에러] Non-ASCII Character 관련된 한글 에러 문제 (8) | 2021.05.06 |
파이썬 개발자들이 연결되는 축제의 장, 기대되는 파이콘 한국 2019 (0) | 2019.08.01 |