측정소와 수온
실시간 수질정보시스템(http://koreawqi.go.kr/index_web.jsp)
에서는 수계별 실시간 수질자료를 제공합니다.
수계별 실시간 수질자료 내용은 iframe을 사용하므로, 해당 소스로 접속합니다.
1 | static String targetURL = "<a href=" http: //koreawqi.go.kr/wQSCHomeLayout_D.wq?action_type=T" target="_blank" rel="noreferrer" style="cursor:help;display:inline !important;">http://koreawqi.go.kr/wQSCHomeLayout_D.wq?action_type=T</a>"; |
GET
방식으로 접근하여 HTML 코드를 가져옵니다.
모든 줄바꿈을 제거 합니다.
1 | content += line.replace(System.getProperty( "line.separator" ), "" ); |
그 후에 모든 공백을 제거 합니다.
1 | content = content.replaceAll( "\\s+" , "" ); |
그 중에서
<tdclass="start">평창강</td><td>1.2</td><!--수온-->
위와 같은 문자열에서 원하는 값을 찾기 위해 정규표현식을 작성합니다.
1 | Pattern pp = Pattern.compile( "<tdclass=\"start\">(?<POINT>.+?)</td><td>(?<TEMPO>.+?)</td><!--수온-->" ); |
이를 출력하면
1 | System.out.println( "측정소:" +mm.group( "POINT" ) + "\t" + "수온:" + mm.group( "TEMPO" )); |
아래와 같은 결과를 얻을 수 있습니다.
측정소:평창강 수온:1.2 측정소:단양 수온:1.9 측정소:충주 수온:4.6 측정소:달천 수온:1.8 측정소:원주 수온:2.2
전체 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FishingTemp { HttpURLConnection httpConn = null ; static String targetURL = "<a href=" http: //koreawqi.go.kr/wQSCHomeLayout_D.wq?action_type=T" target="_blank" rel="noreferrer" style="cursor:help;display:inline !important;">http://koreawqi.go.kr/wQSCHomeLayout_D.wq?action_type=T</a>"; public void printInfo() { // TODO Auto-generated method stub String urlParameters = "" ; // 파라메타값 try { URL url = new URL(targetURL); httpConn = (HttpURLConnection) url.openConnection(); // 헤더 선언 httpConn.setRequestMethod( "GET" ); httpConn.setRequestProperty( "Content-Type" , "application/x-www-form-urlencoded;charset=utf-8" ); // httpConn.setRequestProperty("Cookie", "cookievalue="+ cookie); httpConn.setUseCaches( false ); httpConn.setDoInput( true ); httpConn.setDoOutput( true ); PrintWriter pw = new PrintWriter( new OutputStreamWriter(httpConn.getOutputStream(), "utf-8" )); pw.write(urlParameters); pw.flush(); pw.close(); // Get Response InputStream is = httpConn.getInputStream(); BufferedReader rd = new BufferedReader( new InputStreamReader(is)); String line; String content = "" ; while ((line = rd.readLine()) != null ) { content += line.replace(System.getProperty( "line.separator" ), "" ); //System.out.println(line); // response1.append('\r'); } content = content.replaceAll( "\\s+" , "" ); //System.out.println(content); // <tdclass="start">평창강</td><td>1.2</td><!--수온--> // <tdclass="start">(?<POINT>.+)</td><td>(?<TEMPO>.+)</td><!--수온--> Pattern pp = Pattern.compile( "<tdclass=\"start\">(?<POINT>.+?)</td><td>(?<TEMPO>.+?)</td><!--수온-->" ); Matcher mm = pp.matcher(content); while (mm.find()) { System.out.println( "측정소:" +mm.group( "POINT" ) + "\t" + "수온:" + mm.group( "TEMPO" )); //type type = (type) mm.find().nextElement(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
'Programming > Java' 카테고리의 다른 글
[java] How To Call Native (DLL) Code From Java Using JNI (0) | 2016.05.11 |
---|---|
한글상태일 경우 글자수 찾기 (0) | 2015.05.19 |
객체 지향의 핵심 5가지 (0) | 2014.04.13 |
1에서 10000까지에서 8이 몇개 (0) | 2012.06.30 |
[JSP] 간단 정리 (0) | 2012.04.02 |
댓글