공공데이터포털에서 데이터 가져올때 SERVICE KEY IS NOT REGISTERED ERROR 가 발생한다면 두가지 이유다 첫번째는 포털사이트에서 미등록시 (1시간 정도 소요된다고 가이드를 준다.) 두번째는 인코딩 문제이다. 인코딩 문제를 해결하는 방법에 대해서 설명한다.

SERVICE_KEY를 받으면 unsafe characters인 %가 포함되어 있다. 우리는 항상 URL에서는 인코딩된 결과를 보기 때문에 자연스럽게 내가 파라미터에 넣어도 잘~ 동작하겠지 생각하지만 그렇게 넣으면 서비스키가 등록되어있지 않다고 나온다!

https://perishablepress.com/stop-using-unsafe-characters-in-urls/

 

(Please) Stop Using Unsafe Characters in URLs | Perishable Press

Just as there are specifications for designing with CSS, HTML, and JavaScript, there are specifications for working with URIs/URLs. The Internet Engineering Task Force (IETF) clearly defines these specifications in numerous documents, including the followi

perishablepress.com

 

현재 나의 SERVICE KEY에 %가 들어있다면 무조건 SERVICE KEY IS NOT REGISTERED ERROR 가 뜰것이다! 인증키가 이미 UTF-8로 제공되고 있기때문에 디코딩 작업이 필요하다. 왜 이렇게 제공을 했을까...

아래 코드는 python3를 기준으로 작성한 코드이다.

from urllib.parse import urlencode, quote_plus
import requests

requests.utils.unquote(SERVICE_KEY)

payload = {"pageNo":"1","startPage":"1","numOfRows":"99999","pageSize":"10","LAWD_CD":""+rcode+ "","DEAL_YMD":""+date+"","type":"json", "serviceKey": requests.utils.unquote(SERVICE_KEY)}
print (requests.utils.unquote(SERVICE_KEY)) 
 
headers = {
    'User-Agent': "PostmanRuntime/7.17.1",
    'Accept': "*/*",
    'Cache-Control': "no-cache",
    'Postman-Token': "95c151d9-9676-4069-a9b5-9bbd72bf5319,cd4efab7-c0c4-4714-a2a3-2a6e03677233",
    'Host': "openapi.molit.go.kr:8081",
    'Accept-Encoding': "gzip, deflate",
    'Cookie': "ROUTEID=.HTTP1",
    'Connection': "keep-alive",
    'cache-control': "no-cache"
    } 
response = requests.request("GET", url, headers=headers, params=payload)

이렇게 하면 결과가 아주 잘 나온다... 모두 삽질하지 마시길

+ Recent posts