weather.html 11.9 KB
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="description" content="" />
        <meta name="author" content="" />
        <title>Modern Business - Start Bootstrap Template</title>
        <!-- Favicon-->
        <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
        <!-- Bootstrap icons-->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" />
        <!-- Core theme CSS (includes Bootstrap)-->
        <link href="css/styles.css" rel="stylesheet" />
    </head>


    <body class="d-flex flex-column">
        <main class="flex-shrink-0">
            <!-- Navigation-->
            <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
                <div class="container px-3">
                    <a class="navbar-brand" href="/">휴게소 정보</a>
                    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
                    <div class="collapse navbar-collapse" id="navbarSupportedContent">
                        <ul class="navbar-nav ms-auto mb-2 mb-lg-0">
                            <li class="nav-item"><a class="nav-link" href="/">Home</a></li>
                            <li class="nav-item"><a class="nav-link" href="/menu">휴게소 메뉴</a></li>
                            <li class="nav-item"><a class="nav-link" href="/weather">날씨</a></li>
                            <li class="nav-item"><a class="nav-link" href="/lpg">LPG</a></li>
                            <li class="nav-item"><a class="nav-link" href="faq.html">FAQ</a></li>
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" id="navbarDropdownBlog" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Blog</a>
                                <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownBlog">
                                    <li><a class="dropdown-item" href="blog-home.html">Blog Home</a></li>
                                    <li><a class="dropdown-item" href="blog-post.html">Blog Post</a></li>
                                </ul>
                            </li>
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" id="navbarDropdownLogin" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Login</a>
                                <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownLogin">
                                    <li><a class="dropdown-item" href="/login">Login</a></li>
                                    <li><a class="dropdown-item" href="/signup">Sign-up</a></li>
                                </ul>
                            </li>
                        </ul>
                    </div>
                </div>
            </nav>

            <!-- Header-->
            <header class="py-5">
                <div class="container px-5">
                    <div class="row justify-content-center">
                        <div class="col-lg-8 col-xxl-6">
                            <div class="text-center my-5">
                                <h1 class="fw-bolder mb-3">휴게소 날씨</h1>
                                <p class="lead fw-normal text-muted mb-4">Just search the name of the rest stop,<br>You'll find out the weather of the rest area.</p>
                               
                                <!--검색 버튼으로 검색할 휴게소 이름 입력 받기-->
                                <p><input type="text" placeholder="휴게소 이름" id="name"><input type="button"  onclick="Showweather()" value="확인"></p>

                            </div>
                        </div>
                    </div>
                </div>
            </header>

            
            <!--bar-->  
            <section class="py-3 bg-light" id="scroll-target">
                <div class="container px-1 my-1">
                    <div class="text-center">
                        <center><p><h3 class="fw-bolder"><reststop_name></reststop_name></h3></p></center>
                        <center><hr style ="height:2px; width: 55%"></hr></center>
                        <center><p><h5 class="fw-bolder"><bar1></bar1>&emsp; &emsp; &nbsp; <bar2></bar2> &emsp; &emsp; &nbsp; <bar3></bar3> &emsp; &emsp;  &nbsp; <bar4></bar4></h5></p></center>
                        <div class="container px-1 my-1"><h6 class="lead fw-normal text-muted mb-4"><bar_Weather></bar_Weather><bar_temperature></bar_temperature><bar_humidity></bar_humidity><bar_wind></bar_wind><empty></empty></h6><div>
                    </div>
                    </div>
            </section>  



            <!-- [ 그래프 박스 ]-->
            <!--temperature graph-->
            <section class="py-5" id="scroll-target">
                <div class="container px-5 my-5">
                    <div class="row gx-5 align-items-center">
                        <div class="col-lg-6"><canvas id="temperature-graph" width="100" height="50"></canvas></div>
                        <div class="col-lg-6">
                            <h2 class="fw-bolder"><exp1></exp1></h2>
                            <p class="lead fw-normal text-muted mb-0"><exp2></exp2></p>
                        </div>
                    </div>
                </div>
            </section>


            <!--humidity graph-->
            <section class="py-5" id="scroll-target">
                <div class="container px-5 my-5">
                    <div class="row gx-5 align-items-center">
                        <div class="col-lg-6"><canvas id="humidity-graph" width="100" height="50"></canvas></div>
                        <div class="col-lg-6">
                            <h2 class="fw-bolder"><exp3></exp3></h2>
                            <p class="lead fw-normal text-muted mb-0"><exp4></exp4></p>
                        </div>
                    </div>
                </div>
            </section>
            


            <!--wind graph-->
            <section class="py-5" id="scroll-target">
                <div class="container px-5 my-5">
                    <div class="row gx-5 align-items-center">
                        <div class="col-lg-6"><canvas id="wind-graph" width="100" height="50"></canvas></div>
                        <div class="col-lg-6">
                            <h2 class="fw-bolder"><exp5></exp5></h2>
                            <p class="lead fw-normal text-muted mb-0"><exp6></exp6></p>
                        </div>
                    </div>
                </div>
            </section>   
            

            <script>  
                //날씨 오픈 api는 조회 방식이나 끌어오는 데이터가 복잡해서 주석을 자세히 작성함

                //* 휴게소 날씨 오픈 api 주의 사항 ()
                //날씨 정보가 반영되는 데에 시간이 걸려서 대체적으로 (현재 시간-3시간)부터 조회 가능함
                //날씨 정보가 올라오지 않는, 데이터가 빈 시간대도 존재함.
                //오픈 api 데이터를 가져오기 위해서는 필수적으로 key, type(xml/json), sdate(날짜), stdHour(시간)을 입력해야 함
                
                //[ 현재 year, month, date, time(hour) 받아오기 ]
                //데이터 조회시 year이나 time은 7대신 07형태로 입력해야 하므로 slice를 이용하여 0X형태로 만듦
                let present = new Date();   
                let present_year = present.getFullYear(); 
                let present_month = ('0'+(present.getMonth() + 1)).slice(-2);  
                let present_date = present.getDate();  
                let present_time = ('0'+(present.getHours())).slice(-2); 

                //현재 년도, 월, 날짜를 YYYYMMDD형태로 변형
                //날씨 오픈 api의 연일월 입력타입이 YYYYMMDD
                let YYYYMMDD = String(present_year)+String(present_month)+String(present_date);  

                //어제 날짜 구하기
                //어제 날짜를 구하는 이유는 바를 출력할 때는 최소 2-3시간, 그래프를 출력할 때에는 9시간 전 ~ 3시간 전의 데이터를
                //수집해야 하는데, 이때 이 구간이 00시에 겹치는 경우에는 그 이전에 해당하는 시간은 yesterday_YYYYMMDD로, 
                //그 이후에 해당하는 시간은 YYYYMMDD로 하여 데이터를 정확하게 가져오기 위함이다.  
                let yesterday = new Date(present_year, present.getMonth(), present_date-1).toLocaleDateString();
                ydata = yesterday.split('.');
                yesterday_YYYYMMDD = String(ydata[0])+ ('0'+String(ydata[1].substr(1))).slice(-2) + ('0'+String(ydata[2].substr(1))).slice(-2)
                
                console.log(yesterday_YYYYMMDD)
                console.log(YYYYMMDD)
                

                //검색창에 휴게소 이름을 입력하면 실행되는 함수 Showweather()
                function Showweather() {

                //휴게소 이름을 검색하기 전까지는 기타 html 구성 요소들은 숨기기 위하여 innerHTML사용
                //휴게소 이름 검색시 화면에 표시
                //bar
                document.querySelector('bar1').innerHTML = '날씨';
                document.querySelector('bar2').innerHTML = '온도';
                document.querySelector('bar3').innerHTML = '습도';
                document.querySelector('bar4').innerHTML = '바람';
                
                //그래프
                document.querySelector('exp1').innerHTML = 'Temperature 기온';
                document.querySelector('exp2').innerHTML = '지금으로부터 9시간 전부터 3시간 전까지의 기온을 조회합니다. <br>* 날씨 데이터가 없는 시간대는 조회 불가능합니다';
                document.querySelector('exp3').innerHTML = 'Humidity 습도';
                document.querySelector('exp4').innerHTML = '지금으로부터 9시간 전부터 3시간 전까지의 습도를 조회합니다. ';
                document.querySelector('exp5').innerHTML = 'wind velocity 풍속';
                document.querySelector('exp6').innerHTML = '지금으로부터 9시간 전부터 3시간 전까지의 풍속을 조회합니다. ';

                //사용자가 입력한 휴게소 이름의 값을 name 변수에 할당    
                name = document.getElementById('name').value 
                //bar부분에 휴게소 이름 출력
                document.querySelector('reststop_name').innerHTML = name;}

            </script>

                 
        </main>
        <!-- Footer-->
        <footer class="bg-dark py-4 mt-auto">
            <div class="container px-5">
                <div class="row align-items-center justify-content-between flex-column flex-sm-row">
                    <div class="col-auto"><div class="small m-0 text-white">Copyright &copy; Your Website 2022</div></div>
                    <div class="col-auto">
                        <a class="link-light small" href="#!">Privacy</a>
                        <span class="text-white mx-1">&middot;</span>
                        <a class="link-light small" href="#!">Terms</a>
                        <span class="text-white mx-1">&middot;</span>
                        <a class="link-light small" href="#!">Contact</a>
                    </div>
                </div>
            </div>
        </footer>


        <!-- Bootstrap core JS-->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
        <!-- Core theme JS-->
        <script src="js/scripts.js"></script>
    </body>
</html>