OPEN API
  • 1. 제공기관 : KISTEP

    2. 서비스유형 : REST

    3. 원본 데이터 조회 주소 : http://www.k2base.re.kr/plan/plcy/plcyPlanNewList.do

    4. 중장기 계획 목록 조회

    • 중장기계획명 또는 주관부처명으로 검색을 하면 해당하는 중장기계획에 대한 중장기계획명, 주관부처명, 대분류, 세분류, 시작년도, 종료년도가 조회된다.
    • 요청주소 : http://www.k2base.re.kr/openapi/plan/list.do
    • 사용 예 ) http://www.k2base.re.kr/openapi/plan/list.do?apiKey=36자리 API키&planNm=우주기술&deptNm=미래창조과학부&pageSize=10&pageIndex=1
    • 요청변수

      목록조회

      목록조회
      항목명 샘플데이터 설명
      API키 e72867dc-f6dc-4730-964e-b5b9192e7e06 API를 사용하기 위한 KEY
      planNm 우주기술 중장기계획명
      deptNm 미래창조과학부 주관부처명
      pegeSize 10 페이지당 출력 개수
      pageIndex 1 페이지 번호
    • 출력결과

      출력결과

      출력결과
      항목명 샘플데이터 설명
      planId 401 중장기계획 고유키
      planNm 우주기술산업화전략 중장기계획명
      deptNm 미래창조과학부 주관부처명
      planFieldMain 우주/공공 대분류
      planFieldSub 우주/공공 세분류
      startYear 2013 시작년도
      endYear 2017 종료년도

    5. 중장기계획 상세 조회

    • 자체심의기구명, 법정계획여부, 시행계획여부, 근거법령이 조회된다.
    • 요청주소 : http://www.k2base.re.kr/openapi/plan/detail.do
    • 사용 예 ) http://www.k2base.re.kr/openapi/plan/detail.do?apiKey=36자리 API키&planId=401
    • 요청변수

      요청변수

      요청변수
      항목명 샘플데이터 설명
      API키 e72867dc-f6dc-4730-964e-b5b9192e7e06 API를 사용하기 위한 KEY
      planId 401 중장기계획 교유키
    • 출력결과

      출력결과

      출력결과
      항목명 샘플데이터 설명
      planId 401 중장기계획 고유키
      planNm 우주기술산업화전략 중장기계획명
      deptNm 미래창조과학부 주관부처명
      planFieldMain 우주/공공 대분류
      planFieldSub 우주/공공 세분류
      startYear 2013 시작년도
      endYear 2017 종료년도
      lastSetOrgNm 장차관이하 최종확정기구
      msipSetYn Y 미래부확정여부
      slfDlbrtOrgNm 국가우주위원회 자체심의기구명
      crtPlanYn N 법정계획여부
      execPlanYn Y 시행계획여부
      grdLaw 우주개발 진흥법 제15조 근거법령

    6. 샘플코드

    @Controller
    public class ApiExplorer {
    
    	@RequestMapping(value="/openapi/plan/sample1.do")
    	public String openApiSample() throws Exception {
    
    		return "/openapi/openApiSample1";
    	}
    
    	@RequestMapping(value="/openapi/plan/sample2.do")
    	public String openApiSample(@RequestParam(value="apiKey", required=true) String apiKey,
    				@RequestParam(value="planNm", required=false) String planNm,
    				@RequestParam(value="deptNm", required=false) String deptNm,
    				@RequestParam(value="pageSize", defaultValue="10") int pageSize,
    				@RequestParam(value="pageIndex", defaultValue="1") int pageIndex, Model model) throws Exception {
    
    		StringBuilder urlBuilder = new StringBuilder("http://k2base.re.kr/openapi/plan/list.do"); /*URL*/
    		urlBuilder.append("?" + URLEncoder.encode("apiKey","UTF-8") + "=" + URLEncoder.encode(apiKey, "UTF-8")); /*apiKey*/
    		urlBuilder.append("&" + URLEncoder.encode("planNm","UTF-8") + "=" + URLEncoder.encode(planNm, "UTF-8")); /*계획명*/
    		urlBuilder.append("&" + URLEncoder.encode("deptNm","UTF-8") + "=" + URLEncoder.encode(deptNm, "UTF-8")); /*부처명*/
    		urlBuilder.append("&" + URLEncoder.encode("pageSize","UTF-8") + "=" + pageSize); /*페이지 출력 건수*/
    		urlBuilder.append("&" + URLEncoder.encode("pageIndex","UTF-8") + "=" + pageIndex); /*페이지 번호*/
    
    		URL url = new URL(urlBuilder.toString());
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    		conn.setRequestMethod("GET");
    		conn.setRequestProperty("Content-type", "application/json");
    
    		BufferedReader rd;
    
    		if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
    			rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    		} else {
    			rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
    		}
    
    		StringBuilder sb = new StringBuilder();
    		String line;
    
    		while ((line = rd.readLine()) != null) {
    			sb.append(line);
    		}
    		rd.close();
    		conn.disconnect();
    
    		ArrayList<HashMap<String, String>> resultList = new ArrayList<HashMap<String, String>>();
    
    		try{
    			InputSource is = new InputSource(new StringReader(sb.toString()));
    			Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    
    			// xpath 생성
    			XPath  xpath = XPathFactory.newInstance().newXPath();
    
    			String expression = "//*/planItem";
    
    			NodeList  cols = (NodeList) xpath.compile(expression).evaluate(document, XPathConstants.NODESET);
    
    			for( int idx=0; idx < cols.getLength(); idx++ ){
    
    	    		HashMap<String, String> resultMap = new HashMap<String, String>();
    
    				String resultId=cols.item(idx).getAttributes().item(0).getTextContent();
    				resultMap.put("id",resultId);
    
    				expression = "//*[@id="+resultId+"]/planNm";
    				String resultPlanNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("planNm",resultPlanNm);
    
    				expression = "//*[@id="+resultId+"]/deptNm";
    				String resultDeptNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("deptNm",resultDeptNm);
    
    				expression = "//*[@id="+resultId+"]/startYear";
    				String resultStartYear = xpath.compile(expression).evaluate(document);
    				resultMap.put("startYear",resultStartYear);
    
    				expression = "//*[@id="+resultId+"]/endYear";
    				String resultEndYear = xpath.compile(expression).evaluate(document);
    				resultMap.put("endYear",resultEndYear);
    
    				expression = "//*[@id="+resultId+"]/planFieldMain";
    				String resultPlanFieldMain = xpath.compile(expression).evaluate(document);
    				resultMap.put("planFieldMain",resultPlanFieldMain);
    
    				expression = "//*[@id="+resultId+"]/planFieldSub";
    				String resultPlanFieldSub = xpath.compile(expression).evaluate(document);
    				resultMap.put("planFieldSub",resultPlanFieldSub);
    
    				resultList.add(resultMap);
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    
    		model.addAttribute("resultList", resultList);
    
    		return "/openapi/openApiSample2";
    	}
    
    
    	@RequestMapping(value="/openapi/plan/sample3.do")
    	public String openApiDetailSample(@RequestParam(value="apiKey", required=true) String planId,
    	@RequestParam(value="planId", required=true) int planId,
    	Model model) throws Exception {
    
    		StringBuilder urlBuilder = new StringBuilder("http://k2base.re.kr/openapi/plan/detail.do"); /*URL*/
    		urlBuilder.append("?" + URLEncoder.encode("apiKey","UTF-8") + "=" + URLEncoder.encode(apiKey, "UTF-8")); /*apiKey*/
    		urlBuilder.append("&" + URLEncoder.encode("planId","UTF-8") + "=" + planId); /*고유키*/
    
    		URL url = new URL(urlBuilder.toString());
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    		conn.setRequestMethod("GET");
    		conn.setRequestProperty("Content-type", "application/json");
    
    		BufferedReader rd;
    
    		if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
    			rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    		} else {
    			rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
    		}
    
    		StringBuilder sb = new StringBuilder();
    		String line;
    
    		while ((line = rd.readLine()) != null) {
    			sb.append(line);
    		}
    
    		rd.close();
    		conn.disconnect();
    
    		HashMap<String, String> resultMap = new HashMap<String, String>();
    
    		try{
    			InputSource is = new InputSource(new StringReader(sb.toString()));
    			Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    
    			// xpath 생성
    			XPath  xpath = XPathFactory.newInstance().newXPath();
    
    			String expression = "//*/planDetail";
    
    			NodeList  cols = (NodeList) xpath.compile(expression).evaluate(document, XPathConstants.NODESET);
    
    			for( int idx=0; idx<cols.getLength(); idx++ ){
    
    				String resultId=cols.item(idx).getAttributes().item(0).getTextContent();
    				resultMap.put("id",resultId);
    
    				expression = "//*[@id="+resultId+"]/planNm";
    				String resultPlanNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("planNm",resultPlanNm);
    
    				expression = "//*[@id="+resultId+"]/deptNm";
    				String resultDeptNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("deptNm",resultDeptNm);
    
    				expression = "//*[@id="+resultId+"]/startYear";
    				String resultStartYear = xpath.compile(expression).evaluate(document);
    				resultMap.put("startYear",resultStartYear);
    
    				expression = "//*[@id="+resultId+"]/endYear";
    				String resultEndYear = xpath.compile(expression).evaluate(document);
    				resultMap.put("endYear",resultEndYear);
    
    				expression = "//*[@id="+resultId+"]/planFieldMain";
    				String resultPlanFieldMain = xpath.compile(expression).evaluate(document);
    				resultMap.put("planFieldMain",resultPlanFieldMain);
    
    				expression = "//*[@id="+resultId+"]/planFieldSub";
    				String resultPlanFieldSub = xpath.compile(expression).evaluate(document);
    				resultMap.put("planFieldSub",resultPlanFieldSub);
    
    				expression = "//*[@id="+resultId+"]/lastSetOrgNm";
    				String resultLastSetOrgNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("lastSetOrgNm",resultLastSetOrgNm);
    
    				expression = "//*[@id="+resultId+"]/msipSetYn";
    				String resultMsipSetYn = xpath.compile(expression).evaluate(document);
    				resultMap.put("msipSetYn",resultMsipSetYn);
    
    				expression = "//*[@id="+resultId+"]/slfDlbrtOrgNm";
    				String resultSlfDlbrtOrgNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("slfDlbrtOrgNm",resultSlfDlbrtOrgNm);
    
    				expression = "//*[@id="+resultId+"]/crtPlanYn";
    				String resultCrtPlanYn = xpath.compile(expression).evaluate(document);
    				resultMap.put("crtPlanYn",resultCrtPlanYn);
    
    				expression = "//*[@id="+resultId+"]/execPlanYn";
    				String resultExecPlanYn = xpath.compile(expression).evaluate(document);
    				resultMap.put("execPlanYn",resultExecPlanYn);
    
    				expression = "//*[@id="+resultId+"]/grdLaw";
    				String resultGrdLaw = xpath.compile(expression).evaluate(document);
    				resultMap.put("grdLaw",resultGrdLaw);
    
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    
    		model.addAttribute("resultMap", resultMap);
    
    		return "/openapi/openApiSample3";
    	}
    }
    		
  • 1. 제공기관 : KISTEP

    2. 서비스유형 : REST

    3. 원본 데이터 조회 주소 : http://www.k2base.re.kr/kistepReport/list.do

    4. 연구보고서 목록 조회

    • 연구보고서명으로 검색을 하면 해당하는 연구보고서에 대한 보고서 고유키, 보고서 고유키2, 연도, 보고서명, 연구책임자명, 첨부파일명이 조회된다.
    • 요청주소 : http://www.k2base.re.kr/openapi/kistepReport/list.do
    • 사용 예 ) http://www.k2base.re.kr/openapi/kistepReport/list.do?apiKey=36자리 API키&nttSj=과학기술&pageSize=10&pageIndex=1
    • 요청변수

      목록조회

      목록조회
      항목명 샘플데이터 설명
      API키 f54f0aff-f715-403a-ba82-f04ad9a8fea7 API를 사용하기 위한 KEY
      nttSj 과학기술 보고서명
      pageSize 10 페이지당 출력 개수
      pageIndex 1 페이지 번호
    • 출력결과

      출력결과

      출력결과
      항목명 샘플데이터 설명
      nttId 1 보고서 고유키
      nttId2 13 보고서 고유키2
      stanYy 2011 연도
      nttSj Asian Research Policy 발간을 위한 기획연구 보고서명
      officer 오동훈 연구책임자명
      atchFileId FILE_000000000000001 첨부파일Id

    5. 연구보고서 상세 조회

    • 사업명, 과제명, 보고서명, 보고서유형, 연구책임자명, 연구시작년도, 종료년도가 조회된다.
    • 요청주소 : http://www.k2base.re.kr/openapi/kistepReport/detail.do
    • 사용 예 ) http://www.k2base.re.kr/openapi/kistepReport/detail.do?apiKey=36자리 API키&nttId=1&nttId2=13
    • 요청변수

      요청변수

      요청변수
      항목명 샘플데이터 설명
      API키 f54f0aff-f715-403a-ba82-f04ad9a8fea7 API를 사용하기 위한 KEY
      nttId 1 보고서 고유키
      nttId2 13 보고서 고유키2
    • 출력결과

      출력결과

      기술수준그래프
      항목명 샘플데이터 설명
      nttId 1 보고서 고유키
      nttId2 13 보고서 고유키2
      bzNm 글로벌기획평가네트워크역량강화사업 사업명
      pjNm Asian Research Policy 발간을 위한 기획연구 과제명
      nttSj Asian Research Policy 발간을 위한 기획연구 보고서명
      officer 오동훈 연구책임자명
      strtYy 2011-01-01 연구시작
      endYy 2011-12-31 연구종료
      stanYy 2011 연도
      reportType 최종보고서 보고서 유형
      bzType 기관고유사업 사업구분
      atchFileID FILE_000000000000001 첨부파일Id

    6. 샘플코드

    @Controller
    public class ApiExplorer {
    
    	@RequestMapping(value="/openapi/kistepReport/sample1.do")
        public String openApiSample() throws Exception {
    
    		return "/openapi/openApiSample1";
        }
    
    	@RequestMapping(value="/openapi/kistepReport/sample2.do")
        public String openApiSample(@RequestParam(value="nttSj", required=false) String nttSj,
    			@RequestParam(value="bzType", required=false) String bzType,
    			@RequestParam(value="pageSize", defaultValue="10") int pageSize,
    			@RequestParam(value="pageIndex", defaultValue="1") int pageIndex, Model model) throws Exception {
            StringBuilder urlBuilder = new StringBuilder("http://k2base.re.kr/openapi/kistepReport/list.do"); /*URL*/
            urlBuilder.append("?apiKey=f54f0aff-f715-403a-ba82-f04ad9a8fea7"); /*apiKey*/
            urlBuilder.append("&" + URLEncoder.encode("nttSj","UTF-8") + "=" + URLEncoder.encode(nttSj, "UTF-8")); /*보고서명*/
            urlBuilder.append("&" + URLEncoder.encode("bzType","UTF-8") + "=" + URLEncoder.encode(bzType, "UTF-8")); /*사업구분*/
            urlBuilder.append("&" + URLEncoder.encode("pageSize","UTF-8") + "=" + pageSize); /*페이지 출력 건수*/
            urlBuilder.append("&" + URLEncoder.encode("pageIndex","UTF-8") + "=" + pageIndex); /*페이지 번호*/
            URL url = new URL(urlBuilder.toString());
    
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-type", "application/json");
            BufferedReader rd;
            if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            } else {
                rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
            }
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }
            rd.close();
            conn.disconnect();
    
            ArrayList<HashMap<String, String>> resultList = new ArrayList<HashMap<String, String>>();
    
            try{
            	InputSource is = new InputSource(new StringReader(sb.toString()));
            	Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    
            	// xpath 생성
            	XPath  xpath = XPathFactory.newInstance().newXPath();
    
            	String expression = "//*/ReportItem";
    
            	NodeList  cols = (NodeList) xpath.compile(expression).evaluate(document, XPathConstants.NODESET);
    
            	XPathExpression expr = xpath.compile("//*/reportTotalCnt/text()");
    
            	int totalCnt = Integer.parseInt((String)expr.evaluate(document, XPathConstants.STRING), 10);
    
            	XPathExpression expr2 = xpath.compile("//*/statusCode/text()");
            	String sCode = (String)expr2.evaluate(document, XPathConstants.STRING); // 100:정상 호출, 200:apiKey 에러
            	if(totalCnt > 0){
            		for( int idx=0; idx<cols.getLength(); idx++ ){
            			HashMap<String, String> resultMap = new HashMap<String, String>();
    
            			String resultId=cols.item(idx).getAttributes().item(0).getTextContent();
            			resultMap.put("id",resultId);
    
            			expression = "//*[@id="+resultId+"]/nttId";
        				String resultNttId = xpath.compile(expression).evaluate(document);
        				resultMap.put("nttId",resultNttId);
        				expression = "//*[@id="+resultId+"]/nttId2";
        				String resultNttId2 = xpath.compile(expression).evaluate(document);
        				resultMap.put("nttId2",resultNttId2);
        				expression = "//*[@id="+resultId+"]/stanYy";
        				String resultStanYy = xpath.compile(expression).evaluate(document);
        				resultMap.put("stanYy",resultStanYy);
        				expression = "//*[@id="+resultId+"]/nttSj";
        				String resultNttSj = xpath.compile(expression).evaluate(document);
        				resultMap.put("nttSj",resultNttSj);
        				expression = "//*[@id="+resultId+"]/officer";
        				String resultOfficer = xpath.compile(expression).evaluate(document);
        				resultMap.put("officer",resultOfficer);
        				expression = "//*[@id="+resultId+"]/atchFileId";
        				String resultAtchFileId = xpath.compile(expression).evaluate(document);
        				resultMap.put("atchFileId",resultAtchFileId);
            			resultList.add(resultMap);
            		}
            	}
            }catch(Exception e){
            	System.err.println(e);
            }
            model.addAttribute("resultList", resultList);
    		return "/openapi/openApiSample2";
        }
    
    	@RequestMapping(value="/openapi/kistepReport/sample3.do")
        public String openApiDetailSample(@RequestParam(value="nttId", required=true) String nttId,
        		@RequestParam(value="nttId2", required=true) String nttId2,
    			Model model) throws Exception {
            StringBuilder urlBuilder = new StringBuilder("http://k2base.re.kr/openapi/kistepReport/detail.do"); /*URL*/
            urlBuilder.append("?apiKey=f54f0aff-f715-403a-ba82-f04ad9a8fea7"); /*apiKey*/
            urlBuilder.append("&" + URLEncoder.encode("nttId","UTF-8") + "=" + nttId); /*고유키*/
            urlBuilder.append("&" + URLEncoder.encode("nttId2","UTF-8") + "=" + nttId2); /*고유키2*/
            URL url = new URL(urlBuilder.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-type", "application/json");
            BufferedReader rd;
            if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            } else {
                rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
            }
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }
            rd.close();
            conn.disconnect();
    
            ArrayList<HashMap<String, String>> resultList = new ArrayList<HashMap<String, String>>();
            try{
            	InputSource is = new InputSource(new StringReader(sb.toString()));
            	Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    
            	// xpath 생성
            	XPath  xpath = XPathFactory.newInstance().newXPath();
    
            	String expression = "//*/reportDetail";
    
            	NodeList  cols = (NodeList) xpath.compile(expression).evaluate(document, XPathConstants.NODESET);
    
            	for( int idx=0; idx<cols.getLength(); idx++ ){
    
    				String resultId=cols.item(idx).getAttributes().item(0).getTextContent();
    				resultMap.put("id",resultId);
    
    				expression = "//*[@id="+resultId+"]/bzNm";
    				String resultBzNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("bzNm",resultBzNm);
    
    				expression = "//*[@id="+resultId+"]/pjNm";
    				String resultPjNm = xpath.compile(expression).evaluate(document);
    				resultMap.put("pjNm",resultPjNm);
    
    				expression = "//*[@id="+resultId+"]/nttSj";
    				String resultNttSj = xpath.compile(expression).evaluate(document);
    				resultMap.put("nttSj",resultNttSj);
    
    				expression = "//*[@id="+resultId+"]/officer";
    				String resultOfficer = xpath.compile(expression).evaluate(document);
    				resultMap.put("officer",resultOfficer);
    
    				expression = "//*[@id="+resultId+"]/strtYy";
    				String resultStrtYy = xpath.compile(expression).evaluate(document);
    				resultMap.put("strtYy",resultStrtYy);
    
    				expression = "//*[@id="+resultId+"]/endYy";
    				String resultEndYy = xpath.compile(expression).evaluate(document);
    				resultMap.put("endYy",resultEndYy);
    
    				expression = "//*[@id="+resultId+"]/stanYy";
    				String resultStanYy = xpath.compile(expression).evaluate(document);
    				resultMap.put("stanYy",resultStanYy);
    
    				expression = "//*[@id="+resultId+"]/reportType";
    				String resultReportType = xpath.compile(expression).evaluate(document);
    				resultMap.put("reportType",resultReportType);
    
    				expression = "//*[@id="+resultId+"]/bzType";
    				String resultBzType = xpath.compile(expression).evaluate(document);
    				resultMap.put("bzType",resultBzType);
    
    				expression = "//*[@id="+resultId+"]/atchFileId";
    				String resultAtchFileId = xpath.compile(expression).evaluate(document);
    				resultMap.put("atchFileId",resultAtchFileId);
     		   }
            }catch(Exception e){
            	System.err.println(e);
            }
            model.addAttribute("resultMap", resultMap);
    		return "/openapi/openApiSample3";
        }
    }