leeseohyun(lee)

Apply open api (weather of rest area)

...@@ -179,10 +179,131 @@ ...@@ -179,10 +179,131 @@
179 //사용자가 입력한 휴게소 이름의 값을 name 변수에 할당 179 //사용자가 입력한 휴게소 이름의 값을 name 변수에 할당
180 name = document.getElementById('name').value 180 name = document.getElementById('name').value
181 //bar부분에 휴게소 이름 출력 181 //bar부분에 휴게소 이름 출력
182 - document.querySelector('reststop_name').innerHTML = name;} 182 + document.querySelector('reststop_name').innerHTML = name;
183 183
184 +
185 +
186 + // < 맨 위 바에 조회 가능한 데이터 중 가장 최근의 날씨 정보 띄우기>
187 +
188 + //오픈 api에서 받아올 수 있는 데이터가 상당히 띄엄띄엄한 관계로 종종 정보가 없는 시간대도 존재하므로 만약의 경우를 대비하여
189 + //현재 시간으로부터 5시간 전 ~ 2시간 전의 정보중 가장 최근의 정보를 얻을 수 있도록 작성함.
190 +
191 + var nnamedata = new Array(10);
192 + var ttempdata = new Array(10);
193 + var hhumidata = new Array(10);
194 + var wwinddata = new Array(10);
195 +
196 + for(let k=5; k>1; k--){
197 + //present_time-k가 음수인 경우 방지
198 + if(present_time-k <0){
199 + time1 = present_time-k+24;
200 + date1 = yesterday_YYYYMMDD
201 + }
202 + else{
203 + time1 = present_time-k
204 + date1 = YYYYMMDD
205 + }
206 +
207 + //fetch
208 + fetch('http://data.ex.co.kr/openapi/restinfo/restWeatherList?key=6806352377&type=json&sdate='+ date1 +'&stdHour=' + ('0'+ String(time1)).slice(-2)).then(function(response){
209 + //testing
210 + //fetch('http://data.ex.co.kr/openapi/restinfo/restWeatherList?key=test&type=json&sdate='+ "20220316" +'&stdHour='+ ('0'+ String(16)).slice(-2)).then(function(response){
211 + method: 'GET';
212 + body: JSON.stringify(this.obj)
213 + response.text().then(function(text){
214 +
215 + //불필요한 데이터들을 정리하고 split을 이용하여 text data를 array data로 변환
216 + //{}로 구성된 한 세트의 데이터가 어레이의 원소 하나가 되도록 split을 사용
217 + index1=text.indexOf('[')
218 + index2=text.indexOf(']')
219 + ndata=text.substr(index1+1, index2-index1+1)
220 + nndata=ndata.split('},');
221 +
222 +
223 + //ReststopName (휴게소 이름) 데이터 추출
224 + for(let i=0; i<nndata.length; i++){
225 + index3=nndata[i].indexOf('"unitName":"')
226 + index4=nndata[i].indexOf('"unitCode":"')
227 + ReststopName=nndata[i].substr(index3+12, index4-index3-14)
228 +
229 + //데이터에서 추출한 휴게소 이름 ReststopName이 검색창을 통해서 사용자에게 입력받은 이름 name과 일치하는 경우
230 + //그 데이터 셋에서 weather, temperature, humidity, wind를 추출하도록 함.
231 + if(ReststopName == name){
232 + //Weather
233 + index5=nndata[i].indexOf('"weatherContents":"')
234 + index6=nndata[i].indexOf('"statusNo":"')
235 + bar_weather=nndata[i].substr(index5+19, index6-index5-21)
236 +
237 + //temperature
238 + index7=nndata[i].indexOf('"tempValue":"')
239 + index8=nndata[i].indexOf('"dewValue":"')
240 + bar_temperature=nndata[i].substr(index7+13, index8-index7-20)
241 +
242 + //humidity
243 + index9=nndata[i].indexOf('"humidityValue":"')
244 + index10=nndata[i].indexOf('"windContents":"')
245 + bar_humidity=nndata[i].substr(index9+17, index10-index9-26)
246 +
247 + //wind
248 + index11=nndata[i].indexOf('"windValue":"')
249 + bar_wind=nndata[i].substr(index11+13,3)
250 +
251 + //어레이 nnamedata, ttempdata, hhumidata, wwinddata에 각각 bar_weather, bar_temperature, bar_humidity, bar_wind 데이터 할당
252 + nnamedata[k]=bar_weather;
253 + ttempdata[k]=bar_temperature;
254 + hhumidata[k]=bar_humidity;
255 + wwinddata[k]=bar_wind;
256 + }
257 + }
258 + //innerhtml을 이용해서 html화면에 데이터 표기
259 + //5시간 전, 4시간 전, 3시간 전, 2시간 전의 데이터 중 가장 최근의 데이터를 출력하도록 함
260 + for(let o=5; o>1; o-- ){
261 + if(nnamedata[2] !='undefined'){
262 + document.querySelector('bar_Weather').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(nnamedata[2])).slice(-12);
263 + document.querySelector('bar_temperature').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(ttempdata[2])).slice(-14)+'°C';
264 + document.querySelector('bar_humidity').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(hhumidata[2])).slice(-12)+'%'
265 + document.querySelector('bar_wind').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(wwinddata[2])).slice(-12)+ 'm/s';
266 + document.querySelector('empty').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0");
267 + }
268 +
269 + else{
270 + if(nnamedata[3]!='undefined'){
271 + document.querySelector('bar_Weather').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(nnamedata[3])).slice(-12);
272 + document.querySelector('bar_temperature').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(ttempdata[3])).slice(-14)+'°C';
273 + document.querySelector('bar_humidity').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(hhumidata[3])).slice(-12)+'%'
274 + document.querySelector('bar_wind').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(wwinddata[3])).slice(-12)+ 'm/s';
275 + document.querySelector('empty').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0");
276 + }
277 + else{
278 + if(nnamedata[4]!='undefined'){
279 + document.querySelector('bar_Weather').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(nnamedata[4])).slice(-12);
280 + document.querySelector('bar_temperature').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(ttempdata[4])).slice(-14)+'°C';
281 + document.querySelector('bar_humidity').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(hhumidata[4])).slice(-12)+'%'
282 + document.querySelector('bar_wind').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(wwinddata[4])).slice(-12)+ 'm/s';
283 + document.querySelector('empty').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0")
284 + }
285 + else{
286 + if(nnamedata[5]!='undefined'){
287 + document.querySelector('bar_Weather').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(nnamedata[5])).slice(-12);
288 + document.querySelector('bar_temperature').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(ttempdata[5])).slice(-14)+'°C';
289 + document.querySelector('bar_humidity').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(hhumidata[5])).slice(-12)+'%'
290 + document.querySelector('bar_wind').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0"+String(wwinddata[5])).slice(-12)+ 'm/s';
291 + document.querySelector('empty').innerHTML = ("\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0")
292 + }
293 +
294 + }
295 + }
296 + }
297 +
298 + }
299 + })
300 + })
301 + }
302 + }
303 +
184 </script> 304 </script>
185 305
306 +
186 307
187 </main> 308 </main>
188 <!-- Footer--> 309 <!-- Footer-->
......