Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 맥북
- 데이콘
- 편스토랑 우승상품
- Kaggle
- Docker
- 편스토랑
- SW Expert Academy
- 백준
- leetcode
- AI 경진대회
- Real or Not? NLP with Disaster Tweets
- programmers
- 캐치카페
- dacon
- 더현대서울 맛집
- ubuntu
- hackerrank
- Git
- Baekjoon
- 코로나19
- 프로그래머스 파이썬
- 금융문자분석경진대회
- gs25
- ChatGPT
- 파이썬
- github
- PYTHON
- 프로그래머스
- 우분투
- 자연어처리
Archives
- Today
- Total
솜씨좋은장씨
SERVICE KEY IS NOT REGISTERED ERROR 본문
728x90
반응형
공공데이터포털에서 제공하는 API를 처음 활용하고자 할 때
분명히 정상적인 과정으로 활용 승인 받고 얻은 API KEY임에도 불구하고
SERVICE KEY IS NOT REGISTERED ERROR가 발생하여 이 에러로 3일 넘게 혼자 끙끙 거리던 적이 있었다.
그렇게 몇 날 며칠 동안 방법을 찾은 결과 방법을 찾았다.
1. API KEY 인코딩 문제
공공데이터포털에서 제공하는 API KEY는 이미 인코딩이 되어있는 채로 제공이 됩니다.
따라서 API에 이 인코딩 되어있는 키로 데이터를 요청하게 되면
가차없이 SERVICE KEY IS NOT REGISTERED ERROR 에러를 선물해줍니다.
다음과 같은 방법으로 요청 전 API KEY를 디코딩 후 사용하여 이 문제를 해결할 수 있습니다.
Python (requests 라이브러리를 사용한다고 가정하였을때)
import requests
api_key = "공공데이터포털에서 받아 복사해온 인코딩되어있는 API KEY"
api_key_decode = requests.utils.unquote(api_key)
parameters = {"ServiceKey":api_key_decode, "numOfROws":10, "pageNo":1}
req = requests.get(url, params = parameters)
Swift4 (미세먼지 API 요청 시 썼던 코드)
extension String {
func decodeUrl() -> String?{
return self.removingPercentEncoding
}
func encodeUrl() -> String?{
return self.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
}
}
let urlString = "http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getNearbyMsrstnList?"
api_key = "공공데이터포털에서 받아 복사해온 인코딩되어있는 API KEY"
let api_key_decode = api_key.decodeUrl()
var urlComponents = URLComponents(string:urlString)!
urlComponents.queryItems?.append(URLQueryItem(name:"ServiceKey", value:api_key_decode))
urlComponents.queryItems?.append(URLQueryItem(name:"tmX", value: "203338.992989"))
urlComponents.queryItems?.append(URLQueryItem(name:"tmY", value: "444208.200588"))
urlComponents.queryItems?.append(URLQueryItem(name:"_returnType", value:"json"))
urlComponents.percentEncodedQuery = urlComponents.percentEncodedQuery?.replacingOccurrences(of: "+", with: "%2B")
2. 1번과 같이 디코딩을 해주고 나서 접근을 해도 오류가 나는 경우
승인 직후에는 아직 승인여부가 동기화가 되지 않아 오류가 날 수도 있습니다.
만약 1번의 과정을 한 뒤이며 1시간 이상 시간이 지난 뒤에도 동일한 오류가 난다면
공공데이터포털 질의 응답 게시판에 문의를 남기는 것을 추천드립니다.
'유용한 정보 > 기타' 카테고리의 다른 글
@KAKAO 카카오 이메일 등록 완료! (1) | 2019.11.05 |
---|---|
아이패드에서 블루투스 마우스 사용하기! (0) | 2019.09.27 |
KMDb제공 영화 상세정보 API 인증키 발급받기 (2) | 2019.09.20 |
공공데이터포털 API 사용하기! (0) | 2019.09.13 |
[MySQL] Mac MySQL 임시 비밀번호 변경!(5.76 ver) (0) | 2019.08.30 |
Comments