2019.08.28

 

 // API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)

 -응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

 

 기상청 날씨 가져오기

 

 http://www.weather.go.kr/weather/lifenindustry/sevice_rss.jsp

 

RSS > 인터넷 > 서비스 > 생활과 산업 > 날씨 > 기상청

홈 > 생활과 산업 > 서비스 > 인터넷 > RSS |날씨|생활과 산업|서비스|인터넷|RSS

www.weather.go.kr

 

RSS

 

 // RSS(Really Simple Syndication, Rich Site Summary)

 - 컨텐츠 업데이트가 자주 일어나는 웹사이트에서, 업데이트된 정보를 쉽게 구독자들에게 제공하기 위해 XML을 기초로 만들어진 데이터 형식

 - RSS서비스를 이용하면 업데이트된 정보를 찾기 위해 홈페이지에 일일이 방문하지 않아도 업데이트 될 때마다 빠르고 편리하게 확인할 수 있다

 

 

 화면단

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
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
    <script type="text/javascript">
        $(function() {
            $('#apiCall').change(function() {
                
                var stnId = $(this).val();
                
                var request = $.ajax({
                    url: "/apiCallProcess",
                    method: "POST",
                    data: { stnId : stnId },
                    dataType: "json"
                });
                 
                request.done(function( data ) {
                    console.log(data);
                });
                 
                request.fail(function( jqXHR, textStatus ) {
                  alert"Request failed: " + textStatus );
                });
                
            });
        });
    </script>
</head>
<body>
    <select id="apiCall">
        <option value="108"> :: 전국:: </option>
        <option value="109"> 서울/경기 </option>
        <option value="146"> 전라북도 </option>
        <option value="184"> 제주도 </option>
    </select>
</body>
</html>
 

 

 Controller

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
 
import org.springframework.stereotype.Controller;
 
@Controller
public class ApiCallController {
    
    // Jsoup connect url (기상청)
    private final String apiUrl = "http://www.weather.go.kr/weather/forecast/mid-term-rss3.jsp";
    
    @RequestMapping("/apiCall")
    public String apiCall() {
        return "/apiCall.html";
    }
    
    // 서버에서 응답을 줄때 컨텐츠 타입이 application/json
    @RequestMapping(value = "/apiCallProcess", produces = "application/json")
    public @ResponseBody List<Map<String, Object>> apiCallProcess(@RequestParam(value = "stnId"
, defaultValue = "108", required = falseString stnId) {
        // System.out.println(stnId + " <-- stnId apiCall ApiCallController.java");
        
        List<Map<String, Object>> apiList = new ArrayList<Map<String, Object>>();
        
        /*
            Jsoup : Java HTML Parser
            https://jsoup.org/
            Document doc = Jsoup.connect("http://en.wikipedia.org/").get(); 
        */
        
        try {
            Document doc = Jsoup
                    .connect(apiUrl)
                    .data("stnId", stnId)
                    .get();
            
            // location 하위 태그들
            Elements locations = doc.select("location");
            for(int i = 0; i < locations.size(); i++) {
                
                Map<String, Object> locationMap = new HashMap<String, Object>();
                
                // Element, Elements 패턴 보고 파악하여 사용할 것
                Element location = locations.get(i);
                
                // location 하위 data 태그
                Elements datas = location.select("data"); 
                
                // location 하위 city 태그
                String city = location.select("city").text();
                
                locationMap.put("city", city);
                
                List<Map<String, Object>> dataList = new ArrayList<Map<String,Object>>();
                
                for(int d = 0; d < datas.size(); d++) {
                    Map<String, Object> dataMap = new HashMap<String, Object>();
                    
                    Element data = datas.get(d);
                    
                    // data 하위 날짜 tmEf 태그
                    String time = data.select("tmEf").text();
                    
                    // data 하위 날씨 wf 태그
                    String content = data.select("wf").text();
                    
                    dataMap.put("time", time);
                    dataMap.put("content", content);
                    
                    dataList.add(dataMap);
                }
                
                locationMap.put("dataList", dataList);
                
                apiList.add(locationMap);
            }
            
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        return apiList;
    }
}
 
 

 

결과

+ Recent posts