본문 바로가기
Programming/Java

측정소와 수온

by NAMP 2015. 2. 1.

측정소와 수온

실시간 수질정보시스템(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();
        }
    }
 
}


댓글