안드로이드

국민권익위원회의 기관별 청렴도 등급 공공데이터 조회

톰이야요 2023. 11. 13. 14:52

콩콩데이터 앱에 추가된 국민권익위원회의 기관별 청렴도 등급 공공데이터 조회기능을 소개해 드립니다.

기관별청렴도 등급은 파일데이터 형식으로 제공되는 공공데이터로, CSV형태의 파일로 제공이 되고 있었는데, 이제는 API로도 호출하여 데이터를 받을 수 있도록 되어있습니다. 따라서, 호출방법은 API 호출기능과 동일하게 하면 됩니다.

 

 

 

    public void acrc_integrity_estimation()
    {
        try {
            StringBuilder urlBuilder = new StringBuilder("https://api.odcloud.kr/api/15083994/v1/uddi:976c43de-95f9-4ecf-a52d-bf838f5dcefe"); /*URL*/
            urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + m_context.getText(R.string.servicekey)); /*Service Key*/
            urlBuilder.append("&" + URLEncoder.encode("returnType","UTF-8") + "=" + URLEncoder.encode("XML", "UTF-8")); /* XML 방식의 리턴타입 설정 필요, 기본은 Json */
            urlBuilder.append("&" + URLEncoder.encode("page","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지번호*/
            urlBuilder.append("&" + URLEncoder.encode("perPage","UTF-8") + "=" + URLEncoder.encode("10000", "UTF-8")); /*한 페이지 결과 수*/
            m_url = new URL(urlBuilder.toString());
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

호출 문자열을 만들어준 후, 호출하면 됩니다.

 

private void parse_data_acrc(String strData)
    {
        boolean b1 = false, b2 = false, b3 = false, b4 = false, b5 = false;
        boolean b6 = false, b7 = false, b8 = false, b9 = false, b10 = false;
        int nItemCount = 0;

        m_apicode.Init();

        try {
            InputStream isData = new ByteArrayInputStream(strData.getBytes("utf-8"));
            XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = parserFactory.newPullParser();

            parser.setInput(isData, null);
            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType)
                {
                    case XmlPullParser.START_TAG:
                        // XML 데이터 시작
                        String startTag = parser.getName();

                        //XML 구조상, NAME이 col의 요소로 들어가 있음. 따라서, 추가작업 (예시: <col name="CNTRCT_CNCLS_ENDDE">2023-04-05</col>)
                        if (startTag.equals("col")) {String startTagName = parser.getAttributeValue(null, "name"); startTag = startTagName;}

                        if (startTag.equals("기관명")) {b1=true;}
                        if (startTag.equals("기관분류")) {b2=true;}
                        if (startTag.equals("기관유형")) {b3=true;}
                        if (startTag.equals("종합청렴도22년")) {b4=true;}
                        if (startTag.equals("청렴노력도22년")) {b5=true;}
                        if (startTag.equals("청렴체감도22년")) {b6=true;}

                        break;
                    case XmlPullParser.TEXT:
                        if (b1) {m_apicode.SetAPIData_WithCheck(parser.getText(), ACRC_INTEGRITYESTI_COMPANY + nItemCount*ACRC_INTEGRITYESTI_GAP); b1=false;}
                        if (b2) {m_apicode.SetAPIData_WithCheck(parser.getText(), ACRC_INTEGRITYESTI_GUBUN1 + nItemCount*ACRC_INTEGRITYESTI_GAP); b2=false;}
                        if (b3) {m_apicode.SetAPIData_WithCheck(parser.getText(), ACRC_INTEGRITYESTI_GUBUN2 + nItemCount*ACRC_INTEGRITYESTI_GAP); b3=false;}
                        if (b4) {m_apicode.SetAPIData_WithCheck(parser.getText(), ACRC_INTEGRITYESTI_RESULT + nItemCount*ACRC_INTEGRITYESTI_GAP); b4=false;}
                        if (b5) {m_apicode.SetAPIData_WithCheck(parser.getText(), ACRC_INTEGRITYESTI_RESULT_1 + nItemCount*ACRC_INTEGRITYESTI_GAP); b5=false;}
                        if (b6) {m_apicode.SetAPIData_WithCheck(parser.getText(), ACRC_INTEGRITYESTI_RESULT_2 + nItemCount*ACRC_INTEGRITYESTI_GAP); b6=false;}
                        break;

                    case XmlPullParser.END_TAG:
                        if (parser.getName().equals("item")) {nItemCount++;}
                        break;
                    default: break;
                }
                eventType = parser.next();
            }
        }
        catch (Exception e) {
            e.printStackTrace() ;
        }
        m_apicode.SetDataCount(nItemCount);
    }

파싱은 위와 같은 방법으로 하고 있습니다. 데이터 파싱하는 부분을 만들때마다 노가다(?)성 작업을 하게 되어서 더 편한 방법이 있을 것 같은데, 아직 찾지 못했습니다. 위와 같은 형식으로 XML형태로 들어온 데이터를 파싱하여, 데이터를 보관하는 구조에 저장하게 됩니다.

 

 

 

저장한 데이터는 국민권익위원회 화면에 텍스트형태로 나열식으로 표시해줍니다. 조회하여 표시하고 있는 공공데이터는 국민권익위원회의 기관별 청렴도 등급입니다. 1년에 한번씩 평가하는 공공기관의 청렴도(종합청렴도, 청렴노력도,청렴체감도) 결과를 조회할 수 있습니다. 18년도 부터 21년도까지 조회할 수 있는데, 그 이후의 데이터는 올라오지 않네요.

 

 

콩콩데이터 앱은 아래의 포스팅에 안내되어있습니다.

 

 

콩콩데이터 3.0.0 버전 업데이트 (공공데이터 서비스 추가)

오랜만에 콩콩데이터 안드로이드앱의 기능을 개발하고, 공공데이터 서비스를 추가했습니다. 공공데이터 서비스를 추가하기 위해서는 1. 포털에서 적합한 데이터를 찾기위해, 시간을 들여 찾아

rookiego90.tistory.com