관리 메뉴

솜씨좋은장씨

SERVICE KEY IS NOT REGISTERED ERROR 본문

유용한 정보/기타

SERVICE KEY IS NOT REGISTERED ERROR

솜씨좋은장씨 2019. 9. 13. 19:53
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시간 이상 시간이 지난 뒤에도 동일한 오류가 난다면

 

공공데이터포털 질의 응답 게시판에 문의를 남기는 것을 추천드립니다.

Comments