|
날씨 API를 제공하는 것중 대표적인 것으로 http://openweathermap.org/ 가 있습니다.
서울은 id가 1835848이고 위도(lat)는 37.56826, 경도(lon)은 126.977829 입니다.
데이터는 JSON 형태로 들어오는데 데이터를 받는 주소 값은 id를 이용하거나 위도와 경도를 이용할수 있습니다.
오늘 서울의 5일간 날씨 예보
● http://api.openweathermap.org/data/2.5/forecast?id=1835848
● http://api.openweathermap.org/data/2.5/forecast?lat=37.56826&lon=126.977829
저 주소를 클릭하면
이러한 식의 JSON 형태로 데이터가 뿌려지는 것을 볼수 있습니다.
dt_txt는 날짜와 시간이 나오고 description에는 날씨 정보가 나옵니다.
temp_max에는 최고 온도가 나오는데 절대 온도로 되어있어서 temp_max - 273을 해야 섭씨(˚C)를 구할수 있습니다.
날씨의 종류로는 sky is clear, few clouds, scattered clouds, broken clouds, overcast clouds, shower rain, light rain, moderate rain, Rain, Thunderstorm, snow, mist 등이 있습니다.
이제 스프링으로 돌아가서
weather.js 라는 자바스크립트 파일을 만들어 줍니다.
그리고 받아온 데이터가 어떠한 식으로 나오는지 보기위해
----------------------------------------------------------------------------------------
$(document).ready(function(){
$.ajax({
url:"http://api.openweathermap.org/data/2.5/forecast?lat=37.56826&lon=126.977829",
dataType:"json",
success:function(city){
console.log(city);
----------------------------------------------------------------------------------------
를 입력해서 확인을 합니다.
어떠한 식으로 받아오는지를 확인했으니 이제 each문을 돌려서 하나하나의 데이터를 받아오고
오늘 날짜와 비교를 하여 날씨를 뿌려줍니다.
----------------------------------------------------------------------
$(document).ready(function(){
$.ajax({
url:"http://api.openweathermap.org/data/2.5/forecast?lat=37.56826&lon=126.977829",
dataType:"json",
success:function(city){
console.log(city);
$.each(city.list, function(key) {
// 오늘 날짜 구하는 코딩
var now = new Date();
var year= now.getFullYear();
var mon = (now.getMonth()+1)>9 ? ''+(now.getMonth()+1) : '0'+(now.getMonth()+1);
var day = now.getDate()>9 ? ''+now.getDate() : '0'+now.getDate();
var today = year + '-' + mon + '-' + day;
var week = new Array('일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'); // 요일
// api에서 받는 날짜
var date = city.list[key].dt_txt.substring(0,10)
var time = city.list[key].dt_txt.substring(11,13)
var yoil = new Date(date).getDay(); // 받아 오는 날짜의 요일 일-0 월-1 화-2....
var todayLabel = week[yoil];
// 최고온도 절대 온도로 받아 옴으로
var max=(Math.round(city.list[key].main.temp_max) - 273)+"˚C";
// 날씨
var weath = city.list[key].weather[0].description;
if(date === today) {
if(time==='12'){
if (weath === 'sky is clear') {
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'few clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'scattered clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'broken clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'overcast clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'shower rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'light rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'moderate rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'Rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'Thunderstorm'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'snow'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'mist'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
}
}
} else {
if(time==='12'){
if (weath === 'sky is clear') {
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'few clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'scattered clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'broken clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'overcast clouds'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'shower rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'light rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'moderate rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'Rain'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'Thunderstorm'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'snow'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
} else if(weath === 'mist'){
$("#weather").append(date + "의 날씨는 " + weath + " 최고 온도는 " + max+"<br/>");
}
}
}
});
}
});
})
----------------------------------------------------------------------------------------------
시간이 00, 03, 06, 09, 12, 15, 18, 21 으로 세분화 되기 때문에 if문으로 time을 잡아서 쓰시면 됩니다.
이러한 식의 화면이 나오게 되는데 멋이 없으므로 인터넷에서 css파일을 받아와서 적용을 해줍니다.
http://cssdeck.com/search/?q=weather
이곳을 보면 css 소스가 있는데 거기 있는 것을 가져와서 css파일을 저장한다음 적용시켜주면 됩니다.
-----------------------------------------------------------------------------------
if(date === today) {
if(time === '12') {
if (weath === 'sky is clear') {
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon sun'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'few clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'scattered clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'broken clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'overcast clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'shower rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'light rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'moderate rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'Rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'Thunderstorm'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'snow'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon snow2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'mist'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
}
}
} else {
if(time === '12') {
if (weath === 'sky is clear') {
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon sun'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'few clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'scattered clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'broken clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'overcast clouds'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'shower rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'light rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'moderate rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'Rain'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'Thunderstorm'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon rain2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'snow'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon snow2'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
} else if(weath === 'mist'){
$("#weather").append("<div style='float:left;' class='weather-card'><div class='weather-icon cloud'></div><h1>"+max+"</h1><p>"+todayLabel+"</p></div>");
}
}
}
------------------------------------------------------------------------------------------
이런식으로 나오게 됩니다.
첫댓글 명세짱
명세하이