박지환

Merge branch 'feature/holiday-counter'

1 -{
2 - // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
3 - // 기존 특성에 대한 설명을 보려면 가리킵니다.
4 - // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
5 - "version": "0.2.0",
6 - "configurations": [
7 - {
8 - "type": "pwa-node",
9 - "request": "launch",
10 - "name": "Launch Program",
11 - "skipFiles": [
12 - "<node_internals>/**"
13 - ],
14 - "program": "${workspaceFolder}\\app.js"
15 - }
16 - ]
17 -}
...\ No newline at end of file ...\ No newline at end of file
1 -const today = new Date("2022-05-12"); //오늘 날짜 입력
2 -const holiday = new Date("2022-10-01"); //공휴일 날짜 입력
3 -
4 -const diffDate= today.getTime() - holiday.getTime();
5 -
6 -const dday= Math.abs(diffDate / (1000 * 3600 * 24));
7 -
8 -console.log(dday);
...\ No newline at end of file ...\ No newline at end of file
...@@ -13,13 +13,11 @@ var operation = "getHoliDeInfo"; ...@@ -13,13 +13,11 @@ var operation = "getHoliDeInfo";
13 // Do not modify the values 13 // Do not modify the values
14 var SERVEICE_KEY = 14 var SERVEICE_KEY =
15 "qBtJy2Prw8CCnAiijUM7VkuaA9MZozHuiQI4FbEGYdUDPz4%2FM%2FuxegGjNBWK0aWQHvSslVHwIZQwNWh57WgRTA%3D%3D"; 15 "qBtJy2Prw8CCnAiijUM7VkuaA9MZozHuiQI4FbEGYdUDPz4%2FM%2FuxegGjNBWK0aWQHvSslVHwIZQwNWh57WgRTA%3D%3D";
16 -var url = 16 +var url = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/";
17 - "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/" +
18 - operation;
19 var queryParams = "?" + "solYear" + "=" + year; 17 var queryParams = "?" + "solYear" + "=" + year;
20 queryParams += "&" + "solMonth" + "=" + month; 18 queryParams += "&" + "solMonth" + "=" + month;
21 queryParams += "&" + "ServiceKey" + "=" + SERVEICE_KEY; 19 queryParams += "&" + "ServiceKey" + "=" + SERVEICE_KEY;
22 -let requestUrl = url + queryParams; 20 +let requestUrl = url + operation + queryParams;
23 21
24 // Empty variables 22 // Empty variables
25 var text = ""; 23 var text = "";
...@@ -31,7 +29,55 @@ var tempArr = []; ...@@ -31,7 +29,55 @@ var tempArr = [];
31 app.set("views", __dirname + "/views"); 29 app.set("views", __dirname + "/views");
32 app.set("view engine", "ejs"); 30 app.set("view engine", "ejs");
33 31
34 -function init() { 32 +// To get today date by using Date
33 +function getTodayDate() {
34 + var today = new Date();
35 + var year = today.getFullYear();
36 + var month = ("0" + (today.getMonth() + 1)).slice(-2);
37 + var day = ("0" + today.getDate()).slice(-2);
38 + var dateString = year + "-" + month + "-" + day;
39 + // return "2022-10-04"; // 테스트용 날짜를 입력하세요. 테스트가 끝나면 주석처리 하세요. ex) 2022-09-12, 2022-09-15, 2022-10-04
40 + return dateString;
41 +}
42 +
43 +// To get modified date from locdate
44 +function getModifiedDate(locdate) {
45 + return (
46 + locdate.substr(0, 4) +
47 + "-" +
48 + locdate.substr(4, 2) +
49 + "-" +
50 + locdate.substr(6, 2)
51 + );
52 +}
53 +
54 +// To get remaining days from locdate
55 +function getLeftDate(dateName, locdate) {
56 + var today = new Date(getTodayDate()); // today date
57 + var holiday = new Date(getModifiedDate(locdate)); // holiday date
58 + var diffDate = today.getTime() - holiday.getTime();
59 + var dday = Math.abs(diffDate / (1000 * 3600 * 24));
60 + return dday;
61 +}
62 +
63 +// To change parameter
64 +function changeParams(year, month, operation) {
65 + queryParams = "?" + "solYear" + "=" + year;
66 + queryParams += "&" + "solMonth" + "=" + month;
67 + queryParams += "&" + "ServiceKey" + "=" + SERVEICE_KEY;
68 + requestUrl = url + operation + queryParams;
69 +}
70 +
71 +// To check is this left holiday
72 +function cmpDate(date) {
73 + var today = getTodayDate().replace(/\-/g, "");
74 + if (Number(today) <= Number(date)) {
75 + return true;
76 + }
77 +}
78 +
79 +// To get data from holiday api by using parmas
80 +function getData() {
35 request.get(requestUrl, (err, res, body) => { 81 request.get(requestUrl, (err, res, body) => {
36 if (err) { 82 if (err) {
37 console.log("err => " + err); 83 console.log("err => " + err);
...@@ -40,24 +86,18 @@ function init() { ...@@ -40,24 +86,18 @@ function init() {
40 // Read url success 86 // Read url success
41 var result = body; 87 var result = body;
42 var xmlToJson = convert.xml2json(result, { compact: true, spaces: 4 }); 88 var xmlToJson = convert.xml2json(result, { compact: true, spaces: 4 });
43 - console.log(result);
44 - console.log(xmlToJson);
45 fs.writeFileSync("holi.xml", result); // Create/Modify holi.xml 89 fs.writeFileSync("holi.xml", result); // Create/Modify holi.xml
46 fs.writeFileSync("holi.json", xmlToJson); // Create/Modify holi.json 90 fs.writeFileSync("holi.json", xmlToJson); // Create/Modify holi.json
47 var parser = new xml2js.Parser(); 91 var parser = new xml2js.Parser();
48 parser.parseString(result, function (err, res) { 92 parser.parseString(result, function (err, res) {
49 - console.log(res);
50 text = JSON.stringify(res); 93 text = JSON.stringify(res);
51 - console.log(text);
52 // Get dataName method 94 // Get dataName method
53 dateName = []; 95 dateName = [];
54 var idx = text.indexOf("dateName", 0); 96 var idx = text.indexOf("dateName", 0);
55 while (idx != -1) { 97 while (idx != -1) {
56 - console.log(idx);
57 var start = text.indexOf("[", idx) + 2; 98 var start = text.indexOf("[", idx) + 2;
58 var end = text.indexOf("]", idx) - 1; 99 var end = text.indexOf("]", idx) - 1;
59 var tempStr = text.substring(start, end); 100 var tempStr = text.substring(start, end);
60 - console.log(tempStr);
61 dateName.push(tempStr); 101 dateName.push(tempStr);
62 idx = text.indexOf("dateName", idx + 1); 102 idx = text.indexOf("dateName", idx + 1);
63 } 103 }
...@@ -66,40 +106,70 @@ function init() { ...@@ -66,40 +106,70 @@ function init() {
66 locdate = []; 106 locdate = [];
67 idx = text.indexOf("locdate", 0); 107 idx = text.indexOf("locdate", 0);
68 while (idx != -1) { 108 while (idx != -1) {
69 - console.log(idx);
70 var start = text.indexOf("[", idx) + 2; 109 var start = text.indexOf("[", idx) + 2;
71 var end = text.indexOf("]", idx) - 1; 110 var end = text.indexOf("]", idx) - 1;
72 var tempStr = text.substring(start, end); 111 var tempStr = text.substring(start, end);
73 - console.log(tempStr);
74 locdate.push(tempStr); 112 locdate.push(tempStr);
75 idx = text.indexOf("locdate", idx + 1); 113 idx = text.indexOf("locdate", idx + 1);
76 } 114 }
77 - let i = 0;
78 - let length = dateName.length;
79 - while (i < length){
80 - var temptoday = dateName[i];
81 - var tempdate = locdate[i];
82 - var modifiedDate = tempdate.substr(0,4) + '-' + tempdate.substr(4,2) + '-' + tempdate.substr(6,2);
83 - var today = new Date("2022-05-13"); //오늘 날짜 입력
84 - var holiday = new Date(modifiedDate); //공휴일 날짜 입력
85 - var diffDate= today.getTime() - holiday.getTime();
86 - var dday= Math.abs(diffDate / (1000 * 3600 * 24));
87 - console.log(temptoday + "까지 " + dday +"일 남았습니다.");
88 - i++;
89 - }
90 console.log(locdate); 115 console.log(locdate);
91 - // Create tempArr to save dateName and locdate at once 116 + var holiArr = [];
117 + for (var i = 0; i < dateName.length; i++) {
118 + holiArr.push(getLeftDate(dateName[i], locdate[i]));
119 + }
120 + console.log(holiArr);
121 + // Create tempArr to save dateName and locdate and leftDate at once
92 tempArr = []; 122 tempArr = [];
93 - tempArr.push(dateName); 123 + // To check left holiday
94 - tempArr.push(locdate); 124 + var check = false;
125 + for (var i = 0; i < locdate.length; i++) {
126 + if (cmpDate(locdate[i])) {
127 + check = true;
128 + tempArr.push(dateName[i]); // Get recent holiday name
129 + tempArr.push(locdate[i]); // Get recent holiday date
130 + tempArr.push(holiArr[i]); // Get leftDate through locdate
131 + break;
132 + }
133 + }
95 console.log(tempArr); 134 console.log(tempArr);
135 + if (!check) {
136 + // If there are no holidays left this month
137 + console.log(
138 + "이번 달에는 남은 공휴일이 없습니다. 다음달 데이터를 불러옵니다."
139 + );
140 + // Get next month data
141 + month = String(Number(month) + 1).padStart(2, "0");
142 + changeParams(year, month, operation);
143 + getData();
144 + }
145 + console.log("* api로부터 데이터를 불러왔습니다.");
146 + console.log("오늘의 날짜는", getTodayDate(), "입니다.");
147 + console.log(
148 + "가장 가까운 공휴일인 [" +
149 + tempArr[0] +
150 + "]의 날짜는 [" +
151 + tempArr[1] +
152 + "]이고, [" +
153 + tempArr[2] +
154 + "]일 남았습니다."
155 + );
96 }); 156 });
97 } 157 }
98 } 158 }
99 }); 159 });
100 } 160 }
101 161
102 - 162 +// To initialize datas when calling webpage
163 +function init() {
164 + // Intialize Year, Month
165 + var date = getTodayDate().split("-");
166 + year = date[0];
167 + month = date[1];
168 + operation = "getHoliDeInfo";
169 + changeParams(year, month, operation);
170 + // Get data from holiday api
171 + getData();
172 +}
103 173
104 app.get("/", function (req, res) { 174 app.get("/", function (req, res) {
105 init(); 175 init();
......
1 <!-- data.ejs --> 1 <!-- data.ejs -->
2 2
3 <!DOCTYPE html> 3 <!DOCTYPE html>
4 -<html lang="en"> 4 +<html>
5 <head> 5 <head>
6 <meta charset="UTF-8"> 6 <meta charset="UTF-8">
7 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge">
...@@ -9,10 +9,8 @@ ...@@ -9,10 +9,8 @@
9 <title>Document</title> 9 <title>Document</title>
10 </head> 10 </head>
11 <body> 11 <body>
12 - <% for(var i = 0; i < data[0].length; i++) {%> 12 + <p>
13 - <p> 13 + <h1>[<%= data[0] %>]까지 <%= data[2] %>일 남았습니다. (<%= data[1] %>)</h1>
14 - <h1><%= data[0][i] %> <%= data[1][i] %></h1> 14 + </p>
15 - </p>
16 - <% } %>
17 </body> 15 </body>
18 </html> 16 </html>
...\ No newline at end of file ...\ No newline at end of file
......