반응형

File Writing 부분은 작성하지 않았음...

 

여러모로 문제가 있음

 

참고용...


import java.net.URLEncoder;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; 
 
public class getMsrstnAcctoRltmMesureDnsty {
 

    // tag값의 정보를 가져오는 메소드
private static String getTagValue(String tag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes();
    Node nValue = (Node) nlList.item(0);
    if(nValue == null) 
        return null;
    return nValue.getNodeValue();
}

public static void main(String[] args) {
int page = 1; // 페이지 초기값 
     int totalCount = 0; // 전체 건수
    
     int nowCnt = 0; // 현재 페이지의 건수
    
     // JSON Object 
     JSONArray jitem = new JSONArray(); 
    
    
    
try{
while(true){

 // 서비스 인증키입니다. 공공데이터포털에서 제공해준 인증키를 넣어주시면 됩니다.         
            String serviceKey = "키입력";
             
             
            // 한페이지에서 읽어올 개수
            String numOfRows   = "5";         
            
            // 한글은 encoding 수행합니다.
         String stationName = URLEncoder.encode("종로구", "UTF-8");
         String ver         = "1.0";
         String dataTerm    = "DAILY";
         String RtnType     = "XML";
    
     StringBuffer jsonSb = null;
        
        
            String urlStr = "http://openapi.airkorea.or.kr/"
                    + "openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
                    + "?"
                    + "ServiceKey="  + serviceKey
                    + "&stationName=" + stationName
                    + "&dataTerm="  + dataTerm 
                    + "&pageNo=" + page
                    + "&numOfRows=" + numOfRows                    
                    + "&ver=" + ver 
                    + "&_retrunType=" + RtnType
                    ;
            
DocumentBuilderFactory dbFactoty = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactoty.newDocumentBuilder(); 
Document doc = dBuilder.parse(urlStr);



if ( page == 1 ) { 
// 파싱할 tag
NodeList nListT = doc.getElementsByTagName("body");

Node nNodeT = nListT.item(0);
if(nNodeT.getNodeType() == Node.ELEMENT_NODE){

Element eElementT = (Element) nNodeT; 

totalCount = Integer.parseInt(getTagValue("totalCount", eElementT));
} // for end

}

// root tag 
doc.getDocumentElement().normalize();  

// 파싱할 tag
NodeList nList = doc.getElementsByTagName("item");


//JSONObject
for(int temp = 0; temp < nList.getLength(); temp++){
Node nNode = nList.item(temp);
if(nNode.getNodeType() == Node.ELEMENT_NODE){

Element eElement = (Element) nNode;

JSONObject jobj = new JSONObject();


jobj.put("dataTime",  getTagValue("dataTime", eElement).toString());
// jobj.put("so2Value",  Float.parseFloat(getTagValue("so2Value", eElement).toString()));
// jobj.put("coValue",   Float.parseFloat(getTagValue("coValue", eElement).toString()));
// jobj.put("o3Value",   Float.parseFloat(getTagValue("o3Value", eElement).toString()));
// jobj.put("pm10Value", Float.parseFloat(getTagValue("pm10Value", eElement).toString()));
// jobj.put("pm25Value", Float.parseFloat(getTagValue("pm25Value", eElement).toString()));
// jobj.put("khaiValue", Float.parseFloat(getTagValue("khaiValue", eElement).toString()));
// jobj.put("khaiGrade", Float.parseFloat(getTagValue("khaiGrade", eElement).toString()));
// jobj.put("so2Grade",  Float.parseFloat(getTagValue("so2Grade", eElement).toString()));
// jobj.put("coGrade",   Float.parseFloat(getTagValue("coGrade", eElement).toString()));
// jobj.put("o3Grade",   Float.parseFloat(getTagValue("o3Grade", eElement).toString()));
// jobj.put("no2Grade",  Float.parseFloat(getTagValue("no2Grade", eElement).toString()));
// jobj.put("pm10Grade", Float.parseFloat(getTagValue("pm10Grade", eElement).toString()));
// jobj.put("pm25Grade", Float.parseFloat(getTagValue("pm25Grade", eElement).toString()));

jobj.put("so2Value",  getTagValue("so2Value", eElement).toString());
jobj.put("coValue",   getTagValue("coValue", eElement).toString());
jobj.put("o3Value",   getTagValue("o3Value", eElement).toString());
jobj.put("pm10Value", getTagValue("pm10Value", eElement).toString());
jobj.put("pm25Value", getTagValue("pm25Value", eElement).toString());
jobj.put("khaiValue", getTagValue("khaiValue", eElement).toString());
jobj.put("khaiGrade", getTagValue("khaiGrade", eElement).toString());
jobj.put("so2Grade",  getTagValue("so2Grade", eElement).toString());
jobj.put("coGrade",   getTagValue("coGrade", eElement).toString());
jobj.put("o3Grade",   getTagValue("o3Grade", eElement).toString());
jobj.put("no2Grade",  getTagValue("no2Grade", eElement).toString());
jobj.put("pm10Grade", getTagValue("pm10Grade", eElement).toString());
jobj.put("pm25Grade", getTagValue("pm25Grade", eElement).toString());

  JSONParser jsonParser = new JSONParser();
jitem.add(jsonParser.parse(jobj.toJSONString()));

    
} // for end
} // if end



nowCnt = page * Integer.parseInt(numOfRows);

page += 1;

 
if(nowCnt > totalCount){
break;
}
} // while end

} catch (Exception e){
e.printStackTrace();
} // try~catch end

System.out.println("[message]:" + jitem.toJSONString());
System.out.println("End of Main");
} // main end 
   
  }
   


반응형

'4차 산업 > ELK 관련' 카테고리의 다른 글

Logstash 대기 오염 관련 Json 처리 예제  (0) 2019.03.21
반응형

input {

  file {

    type => "json"

    codec => "json" {

        charset => "utf-8"

    }

    path => "/test.json"

    start_position => "beginning"

    sincedb_path => "/dev/null"

  }

}

filter {

  json {

   source => "message"

  }


  # split records tag

  split {

        field => "[records]"

  }


  # new json type append

  if [records][so2Grade] {

  mutate {

        add_field => {

                "so2Grade"    => "%{[records][so2Grade]}"

                "pm25Grade1h" => "%{[records][pm25Grade1h]}"

                "pm10Value24" => "%{[records][pm10Value24]}"

                "khaiValue"   => "%{[records][khaiValue]}"

                "so2Value"    => "%{[records][so2Value]}"

                "coValue"     => "%{[records][coValue]}"

                "pm10Grade1h" => "%{[records][pm10Grade1h]}"

                "o3Grade"     => "%{[records][o3Grade]}"

                "pm10Value"   => "%{[records][pm10Value]}"

                "khaiGrade"   => "%{[records][khaiGrade]}"

                "pm25Value"   => "%{[records][pm25Value]}"

                "no2Grade"    => "%{[records][no2Grade]}"

                "pm25Value24" => "%{[records][pm25Value24]}"

                "pm25Grade"   => "%{[records][pm25Grade]}"

                "mangName"    => "%{[records][mangName]}"

                "coGrade"     => "%{[records][coGrade]}"

                "dataTime"    => "%{[records][dataTime]}"

                "no2Value"    => "%{[records][no2Value]}"

                "pm10Grade"   => "%{[records][pm10Grade]}"

                "o3Value"     => "%{[records][o3Value]}"

        }


        # remove split records

        remove_field => [ "[fields]", "[records]" ]

  }


   # convert field

   mutate {

       convert => {

         "so2Grade"    => "float"

         "pm25Grade1h" => "float"

         "pm10Value24" => "float"

         "khaiValue"   => "float"

         "so2Value"    => "float"

         "coValue"     => "float"

         "pm10Grade1h" => "float"

         "o3Grade"     => "float"

         "pm10Value"   => "float"

         "khaiGrade"   => "float"

         "pm25Value"   => "float"

         "no2Grade"    => "float"

         "pm25Value24" => "float"

         "pm25Grade"   => "float"

         "coGrade"     => "float"

         "no2Value"    => "float"

         "pm10Grade"   => "float"

         "o3Value"     => "float"

         "mangName"    => "string"

      }

   }

}

output {

    stdout { codec => json }

    file {

        codec => json_lines

        path => "/output_test.json"

    }

    elasticsearch {

       hosts => "localhost"

       index => "atmosphere"

    }

}


======================================================


input {

  file {

    type           => "json"

    #codec          => "json"

    codec          => "plain"

    path           => "/media/sf_Class/jptest/jongrogu20190320.json"

    start_position => "beginning"

    sincedb_path   => "/dev/null"

  }

}

filter {

  json {

        source => "message"

  }


  # split records tag

  split {

        field => "[records]"

  }


  # new json type append

  mutate {

        # remove split records

        remove_field => [ "[fields]", "[records]" ]

        add_field => {

                "so2Grade"    => "%{[records][so2Grade]}"

                "pm25Grade1h" => "%{[records][pm25Grade1h]}"

                "pm10Value24" => "%{[records][pm10Value24]}"

                "khaiValue"   => "%{[records][khaiValue]}"

                "so2Value"    => "%{[records][so2Value]}"

                "coValue"     => "%{[records][coValue]}"

                "pm10Grade1h" => "%{[records][pm10Grade1h]}"

                "o3Grade"     => "%{[records][o3Grade]}"

                "pm10Value"   => "%{[records][pm10Value]}"

                "khaiGrade"   => "%{[records][khaiGrade]}"

                "pm25Value"   => "%{[records][pm25Value]}"

                "no2Grade"    => "%{[records][no2Grade]}"

                "pm25Value24" => "%{[records][pm25Value24]}"

                "pm25Grade"   => "%{[records][pm25Grade]}"

                "mangName"    => "%{[records][mangName]}"

                "coGrade"     => "%{[records][coGrade]}"

                "dataTime"    => "%{[records][dataTime]}"

                "no2Value"    => "%{[records][no2Value]}"

                "pm10Grade"   => "%{[records][pm10Grade]}"

                "o3Value"     => "%{[records][o3Value]}"

        }


  }


 # validation

  mutate {

           gsub =>  [

                       "so2Grade" ,    "[^0-9.]" , "",

                       "pm25Grade1h" , "[^0-9.]" , "",

                       "pm10Value24" , "[^0-9.]" , "",

                       "khaiValue" ,   "[^0-9.]" , "",

                       "so2Value" ,    "[^0-9.]" , "",

                       "coValue" ,     "[^0-9.]" , "",

                       "pm10Grade1h" , "[^0-9.]" , "",

                       "o3Grade" ,     "[^0-9.]" , "",

                       "pm10Value" ,   "[^0-9.]" , "",

                       "khaiGrade" ,   "[^0-9.]" , "",

                       "pm25Value" ,   "[^0-9.]" , "",

                       "no2Grade"  ,   "[^0-9.]" , "",

                       "pm25Value24" , "[^0-9.]" , "",

                       "pm25Grade" ,   "[^0-9.]" , "",

                       "coGrade" ,     "[^0-9.]" , "",

                       "no2Value" ,    "[^0-9.]" , "",

                       "pm10Grade" ,   "[^0-9.]" , "",

                       "o3Value" ,     "[^0-9.]" , ""

                    ]

  }




  # convert field

  mutate {

       convert => {

         "so2Grade"    => "float"

         "pm25Grade1h" => "float"

         "pm10Value24" => "float"

         "khaiValue"   => "float"

         "so2Value"    => "float"

         "coValue"     => "float"

         "pm10Grade1h" => "float"

         "o3Grade"     => "float"

         "pm10Value"   => "float"

         "khaiGrade"   => "float"

         "pm25Value"   => "float"

         "no2Grade"    => "float"

         "pm25Value24" => "float"

         "pm25Grade"   => "float"

         "coGrade"     => "float"

         "no2Value"    => "float"

         "pm10Grade"   => "float"

         "o3Value"     => "float"

      }

   }


  # date

  date {

        match => ["dataTime" , "yyyy-MM-dd HH:mm"]

  }


}



output {

    stdout { codec => rubydebug }

    file {

        codec => json_lines

        path => "/media/sf_Class/jptest/output_test.json"

    }

#    elasticsearch {

#       hosts => "localhost"

#       index => "atmosphere"

#    }

}




반응형

+ Recent posts