Showing
4 changed files
with
104 additions
and
61 deletions
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 |
feature-holiday-counter/app.js
deleted
100644 → 0
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 | ... | ... |
-
Please register or login to post a comment