asimryu

공공API-코로나현황

Oct 19th, 2020
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 4.12 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>corona api</title>
  6.     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
  7.     <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
  8.     <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"></script>
  9. </head>
  10. <body>
  11.     <div class="container-fluid">
  12.         <h1>코로나 발생 현황</h1>
  13.         <form class="form-inline mb-2">
  14.             <input type="date" id="startDate" class="form-control">
  15.             ~
  16.             <input type="date" id="endDate" class="form-control">
  17.             <button class="btn-view btn btn-primary ml-2">보기</button>
  18.         </form>
  19.         <table class="table" id="corona-table">
  20.             <thead class="thead-dark">
  21.                 <th>날짜</th>
  22.                 <th>시간</th>
  23.                 <th>확진자</th>
  24.                 <th>치료중</th>
  25.                 <th>사망</th>
  26.                 <th>해제</th>
  27.             </thead>
  28.             <tbody></tbody>
  29.         </table>
  30.     </div>
  31.     <script>
  32.         var url = 'http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19InfStateJson'; /*URL*/
  33.         var queryParams = '?' + encodeURIComponent('ServiceKey') + '='+'서비스키'; /*Service Key*/
  34.         queryParams += '&' + encodeURIComponent('ServiceKey') + '=' + encodeURIComponent('서비스키'); /**/
  35.         queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1'); /**/
  36.         queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('100'); /**/
  37.        
  38.  
  39.         // fetch(url + queryParams)
  40.         // .then( res => res.text() )
  41.         // .then( xml => (new window.DOMParser()).parseFromString(xml, 'text/xml') )
  42.         // .then( data => console.log(data) )
  43.  
  44.         let corona_data = []; //전역(global) 변수
  45.  
  46.         const getCoronaData = async () => {
  47.             let corona_url = url + queryParams;
  48.             //let startDate = "20201001";
  49.             //let endDate = "20201020";
  50.             let startDate = $("#startDate").val();
  51.             let endDate = $("#endDate").val();
  52.             startDate = startDate.replace(/-/g,'');
  53.             endDate = endDate.replace(/-/g,'');
  54.             corona_url += '&' + encodeURIComponent('startCreateDt') + '=' + encodeURIComponent(startDate);
  55.             corona_url += '&' + encodeURIComponent('endCreateDt') + '=' + encodeURIComponent(endDate);
  56.             let response = await fetch(corona_url);
  57.             let txt = await response.text();
  58.             let xml = await (new window.DOMParser()).parseFromString(txt, 'text/xml');
  59.             //console.log(xml);
  60.             corona_data = await xml2json(xml);
  61.             listData(corona_data.items);
  62.         }
  63.  
  64.         const listData = (data) => {
  65.             console.log(data);
  66.             $("#corona-table tbody").html("");
  67.             for(let i=0; i<data.length; i++) {
  68.                 let tr = `
  69.                     <tr>
  70.                         <td>${data[i].date}</td>
  71.                         <td>${data[i].time}</td>
  72.                         <td>${data[i].case}</td>
  73.                         <td>${data[i].care}</td>
  74.                         <td>${data[i].death}</td>
  75.                         <td>${data[i].clear}</td>
  76.                     </tr>
  77.                 `;
  78.                 $("#corona-table tbody").prepend(tr);
  79.             }
  80.         }
  81.  
  82.         const xml2json = (xml) => {
  83.             let data = {};
  84.             let body = $(xml).find("body")[0];
  85.             data.total = $(body).find("totalCount")[0].innerHTML;
  86.             data.page = $(body).find("pageNo")[0].innerHTML;
  87.             let items = $(body).find("item");
  88.             data.items = [];
  89.             for( let i=0; i<items.length; i++) {
  90.                 let item = {};
  91.                 item.date = $(items[i]).find("stateDt").text();
  92.                 item.time = $(items[i]).find("stateTime").text();
  93.                 item.case = $(items[i]).find("decideCnt").text();
  94.                 item.clear = $(items[i]).find("clearCnt").text();
  95.                 item.death = $(items[i]).find("deathCnt").text();
  96.                 item.care = $(items[i]).find("careCnt").text();
  97.                 data.items.push(item);
  98.             }
  99.             return data;
  100.         }
  101.  
  102.         const init = () => {
  103.             let today = new Date();
  104.             let yy = today.getFullYear();
  105.             let mm = today.getMonth() + 1;
  106.             let dd = today.getDate();
  107.             if( mm < 10 ) mm = "0" + mm;
  108.             if( dd < 10 ) dd = "0" + dd;
  109.             let startDate = yy + "-" + mm + "-" + dd;
  110.             $("#startDate").val(startDate);
  111.             $("#endDate").val(startDate);
  112.             getCoronaData();
  113.         }
  114.  
  115.         $(".btn-view").on("click", function(event){
  116.             event.preventDefault();
  117.             getCoronaData();
  118.         });
  119.  
  120.         init();
  121.  
  122.        
  123.  
  124.  
  125.     </script>
  126. </body>
  127. </html>
Add Comment
Please, Sign In to add comment