/data-go-kr

공공데이터포털(https://www.data.go.kr/) OpenAPI CLI 툴

Primary LanguageJavaScriptMIT LicenseMIT

data-go-kr

개요

공공데이터포털 의 OpenAPI 를 요청하는 CLI 툴 입니다.

How to Use

전역 설치

npm install -g data-go-kr

data-go-kr --config <config-path> --service-key <service-key>

npx 사용

npx data-go-kr --config <config-path> --service-key <service-key>

성공 시 표준 출력으로, 실패 시 표준 에러로 결과를 출력합니다.

Config File

공공데이터 API 요청 시 필요한 파라미터들을 설정해놓은 파일입니다.

config/config.template.json을 참고해주세요.

{
    "serviceName": "service name",
    "serviceKey": "your serviceKey",
    "authType": "header|query",
    "endpoint": "api endpoint",
    // and you want...
}

각 서비스 별로 필요한 파라미터 정보는 그 서비스의 API Spec 을 참고해주세요.

파라미터 우선순위

serviceKey, authType, endpoint, serviceName 은 필수 값 입니다.

미리 예약된 키워드는 CLI Option 을 이용해 덮어쓸 수 있습니다.

우선 순위: 1. CLI Option 2. Config File

data-go-kr --config <config-path> --service-key <service-key> --auth-type <auth-type>

만약 --service-key, --auth-type 옵션을 사용했다면 config file 에서 serviceKey, authType 이 무시됩니다.

Config File 예제

{
    "serviceName": "getCorpOutline_V2",
    "serviceKey": "your serviceKey",
    "authType": "query",
    "endpoint": "https://apis.data.go.kr/1160100/service/GetCorpBasicInfoService_V2/",
    "resultType": "json",
    "crno": "1101113892240",
    "corpNm": "메리츠자산운용"
}

CLI Option

Options:
  -c, --config <string>        공공데이터 API 요청 시 필요한 파라미터들의 설정 파일 경로 (required)
  -m, --service-name <string>  서비스 명
  -s, --service-key <string>   서비스 키
  -a, --auth-type <string>     인증 타입 (header|query)
  -e, --endpoint <string>      엔드포인트 주소
  -r, --max-retries <number>   요청 실패 시 최대 재시도 회수 (default: 5)
  -d, --delay <number>         요청 실패 시 재시도 전 대기시간 (ms) (default: 1000)
  -n, --num-of-rows <number>   페이지 당 불러올 행의 개수 (default: 10)
  -p, --page-no <number>       페이지 번호 (default: 1)
  --pretty <indent>            이쁘게 출력
  --no-num-of-rows             기본 페이지네이션 파라미터(num-of-rows)를 사용하지 않음
  --no-page-no                 기본 페이지네이션 파라미터(page-no)를 사용하지 않음

보안상의 이유로

기본적으로 페이지네이션은 numOfRows, pageNo 쿼리 파라미터를 사용합니다.

페이지네이션 방식이 다른 경우 --no-num-of-rows, --no-page-no 파라미터를 사용하고,

config.json 파일에 페이지네이션 파라미터를 삽입해주세요.

Error Handling

오류는 모두 표준 에러로 출력합니다.

exit code 는 1 입니다.

OpenAPI Error

OpenAPI 에서 출력되는 오류메세지는 XML 로만 출력되며, 형태는 아래와 같습니다.

<OpenAPI_ServiceResponse>
    <cmmMsgHeader>
        <errMsg>SERVICE ERROR</errMsg>
        <returnAuthMsg>SERVICE_KEY_IS_NOT_REGISTERED_ERROR</returnAuthMsg>
        <returnReasonCode>30</returnReasonCode>
    </cmmMsgHeader>
</OpenAPI_ServiceResponse>
에러코드 에러메세지 설명
1 APPLICATION ERROR 어플리케이션 에러
4 HTTP_ERROR HTTP 에러
12 NO_OPENAPI_SERVICE_ERROR 해당 오픈 API 서비스가 없거나 폐기됨
20 SERVICE_ACCESS_DENIED_ERROR 서비스 접근거부
22 LIMITED_NUMBER_OF_SERVICE_REQUESTS_EXCEEDS_ERROR 서비스 요청제한횟수 초과에러
30 SERVICE_KEY_IS_NOT_REGISTERED_ERROR 등록되지 않은 서비스키
31 DEADLINE_HAS_EXPIRED_ERROR 활용기간 만료
32 UNREGISTERED_IP_ERROR 등록되지 않은 IP
99 UNKNOWN_ERROR 기타에러

Application Error

CLI 툴 자체의 에러는 아래와 같은 포맷으로 출력됩니다.

error: maxRetries should be integer and greater than 0

Example

금융위원회_기업기본정보

Config

{
  "serviceName": "getCorpOutline_V2",
  "authType": "query",
  "endpoint": "http://apis.data.go.kr/1160100/service/GetCorpBasicInfoService_V2/",
  "resultType": "json",
  "crno": "1101113892240",
  "corpNm": "메리츠자산운용"
}

Command

data-go-kr --config config.getCorpOutline_V2.json --service-key <service-key>

Response

{"response":{"body":{"items":{"item":[{"crno":"1101113892240","corpNm":"메리츠자산운용","corpEnsnNm":"Meritz Asset Management","enpPbanCmpyNm":"메리츠자산운용","enpRprFnm":"이동진","corpRegMrktDcd":"E","corpRegMrktDcdNm":"기타","corpDcd""bzno":"1078708658","enpOzpno":"03051","enpBsadr":"서울특별시 종로구 북촌로 104 계동빌딩","enpDtadr":"서울특별시 종로구 북촌로 104 계동빌딩","enpHmpgUrl":"","enpTlno":"02-6320-3000","enpFxno":"02-6320-3009","sicNm":"64201","enpEstbDt":"2XchgLstgDt":"","enpXchgLstgAbolDt":"","enpKosdaqLstgDt":"","enpKosdaqLstgAbolDt":"","enpKrxLstgDt":"","enpKrxLstgAbolDt":"","smenpYn":"","enpMntrBnkNm":"","enpEmpeCnt":"0","empeAvgCnwkTermCtt":"","enpPn1AvgSlryAmt":"0","actnAudpnNm":"","audtRptOpnnCtt":"","enpMainBizNm":"","fssCorpUnqNo":"00685935","fssCorpChgDtm":"2023/03/20","fstOpegDt":"20230320","lastOpegDt":"20230404"},{"crno":"1101113892240","corpNm":"메리츠자산운용","corpEnsnNm":"Meritz Asset Management","enpPbanCmpyNm":"메리츠자산운용","enpRprFnm":"John Lee(이정복)","corpRegMrktDcd":"E","corpRegMrktDcdNm":"기타","corpDcd":"","corpDcdNm":"","bzno":"1078708658","enpOzpno":"03051","enpBsadr":"서울특별시 종로구 북촌로 104 계동빌딩","enpDtadr":"서울gUrl":"","enpTlno":"02-6320-3000","enpFxno":"02-6320-3009","sicNm":"64201","enpEstbDt":"20080506","enpStacMm":"12","enpXchgLstgDt":"","enpXchgLstgAbolDt":"","enpKosdaqLstgDt":"","enpKosdaqLstgAbolDt":"","enpKrxLstgDt":"","enpKrxLstgAbolDt":"","smenpYn":"","enpMntrBnkNm":"","enpEmpeCnt":"0","empeAvgCnwkTermCtt":"","enpPn1AvgSlryAmt":"0","actnAudpnNm":"","audtRptOpnnCtt":"","enpMainBizNm":"","fssCorpUnqNo":"00685935","fssCorpChgDtm":"2023/01/05","fstOpegDt":"20200509","lastOpegDt":"20230319"}]},"numOfRows":10,"pageNo":1,"totalCount":2},"header":{"resultCode":"00","resultMsg":"NORMAL SERVICE."}}}