[OpenApi - NCPMS] 병해충 검색 정보 받아오기, xml 파싱

강신현·2022년 5월 4일
0

NCPMS 병해충 정보 OpenApi

병 검색 API

  • 병 상세정보 API에 요청 변수(Request Parameters)로 사용할
    sickKey (병 상세정보 조회키) 받아오기

병 상세정보 API

XML 형식으로 잘 받아와졌다.
위 URL을 사용하여 spring에서 구현해보도록 하자.

localhost에서 정보 받아오기

  • XML 형식을 json으로 변환하지 않고 parsing하여 res에 넣어주었다.
  • sickKey는 병 검색 API로 조회해서 나온 병해충 코드 (ex : 팥/흰가루병 : &sickKey=D00001596)
void getXmlData(GetBugInfoRes getBugInfoRes, String sickKey) throws ParserConfigurationException, IOException, SAXException {

        String Url = "http://ncpms.rda.go.kr/npmsAPI/service?" +
                "apiKey=2022b5d55c3ea9fac00003b87fa2ed6e69f3" +
                "&serviceCode=SVC05" +
                sickKey;

        // 1. 빌더 팩토리 생성.
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        // 2. 빌더 팩토리로부터 빌더 생성
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3. 빌더를 통해 Url를 파싱해서 Document 객체로 가져온다.
        Document document = builder.parse(Url);
        // 문서 구조 안정화 ?
        document.getDocumentElement().normalize();

        // XML 데이터 중 <service> 태그의 내용을 가져온다.
        NodeList serviceTagList = document.getElementsByTagName("service");

        for (int i = 0; i < serviceTagList.getLength(); ++i) {
            NodeList childNodes = serviceTagList.item(i).getChildNodes();

            for (int j = 0; j < childNodes.getLength(); ++j) {
                String nodeName = childNodes.item(j).getNodeName();
                String textContent = childNodes.item(j).getTextContent();

                if(nodeName.equals("cropName")) getBugInfoRes.setCropName(textContent);
                if(nodeName.equals("sickNameKor")) getBugInfoRes.setSickNameKor(textContent);
                if(nodeName.equals("sickNameEng")) getBugInfoRes.setSickNameEng(textContent);
                if(nodeName.equals("developmentCondition")) getBugInfoRes.setDevelopmentCondition(textContent);
                if(nodeName.equals("preventionMethod")) getBugInfoRes.setPreventionMethod(textContent);
                if(nodeName.equals("symptoms")) getBugInfoRes.setSymptoms(textContent);
                if(nodeName.equals("infectionRoute")) getBugInfoRes.setInfectionRoute(textContent);
            }
        }
    }

References

profile
땅콩의 모험 (server)

0개의 댓글