728x90
활용신청 및 인증키발급
데이터찾기를 누르시면 파일데이터/Open API 를 선택할 수 있고 원하는 데이터를 활용신청하여 이용하실 수 있습니다.
인증키를 발급받았습니다.
샘플코드
사이트에서 여러언어의 샘플코드를 제공해주고 있습니다.
발급받은 인증키를 넣어서 실행해봅니다.
from urllib2 import Request, urlopen
from urllib import urlencode, quote_plus
key = 'gIQmqloKO%2B9e8xRB3iSW6t9uW%2FKem822g4ELNU%2FdzkhOifcf5%2BnHj9damtop%2FCRAWlyyTlhk7W1F0Jm1GX9w%3D%3D'
url = 'http://apis.data.go.kr/B551182/pubReliefHospService/getpubReliefHospList'
queryParams = '?' + urlencode({ quote_plus('ServiceKey') : key, quote_plus('ServiceKey') : '-', quote_plus('pageNo') : '1', quote_plus('numOfRows') : '10', quote_plus('spclAdmTyCd') : 'A0' })
request = Request(url + queryParams)
request.get_method = lambda: 'GET'
response_body = urlopen(request).read()
print response_body
오류발생, 세상만사 쉽게 안되는 법입니다.
<OpenAPI_ServiceResponse>
<cmmMsgHeader>
<errMsg>SERVICE ERROR</errMsg>
<returnAuthMsg>SERVICE_KEY_IS_NOT_REGISTERED_ERROR</returnAuthMsg>
<returnReasonCode>30</returnReasonCode>
</cmmMsgHeader>
</OpenAPI_ServiceResponse>
샘플코드를 참고하여 파이썬3 코드로 수정해봅니다.
'''
건강보험심사평가원_코로나19병원정보(국민안심병원 외)서비스
'''
import requests
from urllib import parse
url = 'http://apis.data.go.kr/B551182/pubReliefHospService/getpubReliefHospList'
key = 'gIQmqloKO%2B9e8xRB3iSW6t9u%2FKem822g4ELNU%2F3dkhOifcf5%2BnHj9damtop%2FeCRAlyyTlhk7W1F0Jm1GX9w%3D%3D'
queryParams = '?' + parse.urlencode({
parse.quote_plus("ServiceKey") : key,
parse.quote_plus('pageNo') : '1',
parse.quote_plus('numOfRows') : '10',
parse.quote_plus('spclAdmTyCd') : 'A0'
})
print(res.text)
print(res)
print(url + queryParams)
똑같이 오류가 발생합니다.
<OpenAPI_ServiceResponse>
<cmmMsgHeader>
<errMsg>SERVICE ERROR</errMsg>
<returnAuthMsg>SERVICE_KEY_IS_NOT_REGISTERED_ERROR</returnAuthMsg>
<returnReasonCode>30</returnReasonCode>
</cmmMsgHeader>
</OpenAPI_ServiceResponse>
<Response [200]>
http://apis.data.go.kr/B551182/pubReliefHospService/getpubReliefHospList?ServiceKey=gIQmqloKO%252B9e8xRB3iSW6t9uW%252FKem822g4ELNU%252F3dzkhOifcf5%22BnHj9damto%252FeCRAWlyyTlhk7W1F0JmGX9w%253D%253D&pageNo=1&numOfRows=10&spclAdmTyCd=A0
API 는 URL 을 브라우저 주소창에 직접 붙여넣어서 확인할 수 있습니다.
같은 결과.
원인찾기 & 오류해결
원인을 찾아봅니다.
발급받은 인증키를 보면 UTF-8 로 인코딩 되었다고 나와있습니다.
샘플코드에 사용된 urlencode() 를 테스트해봅니다.
인코딩된 값을 인코딩하면 전혀 다른 값이됩니다.
>>> key = '키'
>>> key_encode = parse.urlencode({'ex': key})
>>> key_encode
'ex=%ED%82%A4'
>>>
>>> key_encode2 = parse.urlencode({'ex2': key_encode})
>>> key_encode2
'ex2=ex%3D%25ED%2582%25A4'
그래서 이 코드가 오류가 났었습니다.
'''
건강보험심사평가원_코로나19병원정보(국민안심병원 외)서비스
'''
import requests
from urllib import parse
url = 'http://apis.data.go.kr/B551182/pubReliefHospService/getpubReliefHospList'
key = 'gIQmqloKO%2B9e8xRB3iSW6t9uW%2FKem822g4ELNU%2F3dzkhOifcf5%2BnHj9damtop%2FeCRAWlyyTlhk7W1F0Jm1GX9w%3D%3D'
queryParams = '?' + parse.urlencode({
parse.quote_plus("ServiceKey") : key,
parse.quote_plus('pageNo') : '1',
parse.quote_plus('numOfRows') : '10',
parse.quote_plus('spclAdmTyCd') : 'A0'
})
print((url + queryParams).find(key))
결과는 -1
이미 인코딩된 키값을 제외하니 정상적으로 동작합니다.
'''
건강보험심사평가원_코로나19병원정보(국민안심병원 외)서비스
'''
import requests
from urllib import parse
url = 'http://apis.data.go.kr/B551182/pubReliefHospService/getpubReliefHospList'
key = 'gIQmqloKO%2B9e8xRB3iSW6t9uW%2FKem822g4ELNU%2F3dzkhOifcf5%2BnHj9damtop%2FeCRAWlyyTlhk7W1F0Jm1GX9w%3D%3D'
#1
# queryParams = '?' + parse.urlencode({
# parse.quote_plus("ServiceKey") : key,
# parse.quote_plus('pageNo') : '1',
# parse.quote_plus('numOfRows') : '10',
# parse.quote_plus('spclAdmTyCd') : 'A0'
# })
#2
queryParams = f'?{parse.quote_plus("ServiceKey")}={key}&' + parse.urlencode({
parse.quote_plus('pageNo') : '1',
parse.quote_plus('numOfRows') : '10',
parse.quote_plus('spclAdmTyCd') : 'A0'
})
res = requests.get(url + queryParams)
print(res.text)
print(res)
print((url + queryParams).find(key))
더보기
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><response><header><resultCode>00</resultCode><resultMsg>NORMAL SERVICE.</resultMsg></header><body><items><item><adtFrDd>20200501</adtFrDd><hospTyTpCd>A</hospTyTpCd><sgguNm>밀양시</sgguNm><sidoNm>경남</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>055-351-3993</telno><yadmNm>밀양병원</yadmNm></item><item><adtFrDd>20200520</adtFrDd><hospTyTpCd>B</hospTyTpCd><sgguNm>진천군</sgguNm><sidoNm>충북</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>043-533-1711</telno><yadmNm>의료법인 건명의료재단 진천성모병원</yadmNm></item><item><adtFrDd>20200525</adtFrDd><hospTyTpCd>A</hospTyTpCd><sgguNm>전주시 완산구</sgguNm><sidoNm>전북</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>063-230-8114</telno><yadmNm>재단법인예수병원유지재단예수병원</yadmNm></item><item><adtFrDd>20200511</adtFrDd><hospTyTpCd>A</hospTyTpCd><sgguNm>수원시 권선구</sgguNm><sidoNm>경기
</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>031-278-0119</telno><yadmNm>의료법인 명인의료재단 화홍
병원</yadmNm></item><item><adtFrDd>20200514</adtFrDd><hospTyTpCd>B</hospTyTpCd><sgguNm>청주시 서원
구</sgguNm><sidoNm>충북</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>043-279-2300</telno><yadmNm>충
청북도 청주의료원</yadmNm></item><item><adtFrDd>20200225</adtFrDd><hospTyTpCd>B</hospTyTpCd><sgguNm>춘천시</sgguNm><sidoNm>강원</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>033-258-2000</telno><yadmNm>강원대학교병원</yadmNm></item><item><adtFrDd>20200302</adtFrDd><hospTyTpCd>A</hospTyTpCd><sgguNm>여수시</sgguNm><sidoNm>전남</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>061-690-6000</telno><yadmNm>여천전남병원</yadmNm></item><item><adtFrDd>20200306</adtFrDd><hospTyTpCd>B</hospTyTpCd><sgguNm>서
구</sgguNm><sidoNm>대전</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>042-600-9999</telno><yadmNm>학
교법인 건양교육재단 건양대학교병원</yadmNm></item><item><adtFrDd>20200305</adtFrDd><hospTyTpCd>A</hospTyTpCd><sgguNm>성남시 수정구</sgguNm><sidoNm>경기</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>031-756-8355</telno><yadmNm>지우병원</yadmNm></item><item><adtFrDd>20200302</adtFrDd><hospTyTpCd>B</hospTyTpCd><sgguNm>용인시 기흥구</sgguNm><sidoNm>경기</sidoNm><spclAdmTyCd>A0</spclAdmTyCd><telno>031-300-0114</telno><yadmNm>강남병원</yadmNm></item></items><numOfRows>10</numOfRows><pageNo>1</pageNo><totalCount>330</totalCount></body></response>
<Response [200]>
84
'API' 카테고리의 다른 글
공공데이터 포털 Open API 사용하기 : 외교부_국가·지역별 최신안전소식(코로나관련) -2 : 데이터 전처리 (0) | 2020.07.17 |
---|---|
공공데이터 포털 Open API 사용하기 : 외교부_국가·지역별 최신안전소식(코로나관련) -1 (0) | 2020.07.16 |
공공데이터 포털 Open API 사용하기 : 보건복지부_코로나19 연령별·성별감염_현황 -3 : 그래프 그리기 (1) | 2020.07.15 |
공공데이터 포털 Open API 사용하기 : 보건복지부_코로나19 연령별·성별감염_현황 -2 : 데이터 파싱 (0) | 2020.07.15 |
공공데이터 포털 Open API 사용하기 : 보건복지부_코로나19 연령별·성별감염_현황 (0) | 2020.07.15 |