박지환

Get recent data automatically

......@@ -32,13 +32,11 @@ app.set("view engine", "ejs");
// To get today date by using Date
function getTodayDate() {
var today = new Date();
var year = today.getFullYear();
var month = ("0" + (today.getMonth() + 1)).slice(-2);
var day = ("0" + today.getDate()).slice(-2);
var dateString = year + "-" + month + "-" + day;
// return "2022-10-04"; // 테스트용 날짜를 입력하세요. 테스트가 끝나면 주석처리 하세요. ex) 2022-09-12, 2022-09-15, 2022-10-04
return dateString;
}
......@@ -54,15 +52,15 @@ function getModifiedDate(locdate) {
}
// To get remaining days from locdate
function getDate(dateName, locdate) {
function getLeftDate(dateName, locdate) {
var today = new Date(getTodayDate()); // today date
var holiday = new Date(getModifiedDate(locdate)); // holiday date
var diffDate = today.getTime() - holiday.getTime();
var dday = Math.abs(diffDate / (1000 * 3600 * 24));
console.log(dateName + "까지 " + dday + "일 남았습니다.");
return dday;
}
// To change parameter
function changeParams(year, month, operation) {
queryParams = "?" + "solYear" + "=" + year;
queryParams += "&" + "solMonth" + "=" + month;
......@@ -70,16 +68,16 @@ function changeParams(year, month, operation) {
requestUrl = url + operation + queryParams;
}
// To initialize datas when calling webpage
function init() {
// Intialize Year, Month
var date = getTodayDate().split("-");
year = date[0];
month = date[1];
operation = "getHoliDeInfo";
console.log(year, month);
changeParams(year, month, operation);
// Get data from holiday api
// To check is this left holiday
function cmpDate(date) {
var today = getTodayDate().replace(/\-/g, "");
if (Number(today) <= Number(date)) {
return true;
}
}
// To get data from holiday api by using parmas
function getData() {
request.get(requestUrl, (err, res, body) => {
if (err) {
console.log("err => " + err);
......@@ -88,24 +86,18 @@ function init() {
// Read url success
var result = body;
var xmlToJson = convert.xml2json(result, { compact: true, spaces: 4 });
console.log(result);
console.log(xmlToJson);
fs.writeFileSync("holi.xml", result); // Create/Modify holi.xml
fs.writeFileSync("holi.json", xmlToJson); // Create/Modify holi.json
var parser = new xml2js.Parser();
parser.parseString(result, function (err, res) {
console.log(res);
text = JSON.stringify(res);
console.log(text);
// Get dataName method
dateName = [];
var idx = text.indexOf("dateName", 0);
while (idx != -1) {
console.log(idx);
var start = text.indexOf("[", idx) + 2;
var end = text.indexOf("]", idx) - 1;
var tempStr = text.substring(start, end);
console.log(tempStr);
dateName.push(tempStr);
idx = text.indexOf("dateName", idx + 1);
}
......@@ -114,32 +106,71 @@ function init() {
locdate = [];
idx = text.indexOf("locdate", 0);
while (idx != -1) {
console.log(idx);
var start = text.indexOf("[", idx) + 2;
var end = text.indexOf("]", idx) - 1;
var tempStr = text.substring(start, end);
console.log(tempStr);
locdate.push(tempStr);
idx = text.indexOf("locdate", idx + 1);
}
console.log(locdate);
// Get date through locdate
var holiArr = [];
for (var i = 0; i < dateName.length; i++) {
holiArr.push(getDate(dateName[i], locdate[i]));
holiArr.push(getLeftDate(dateName[i], locdate[i]));
}
// Create tempArr to save dateName and locdate at once
console.log(holiArr);
// Create tempArr to save dateName and locdate and leftDate at once
tempArr = [];
tempArr.push(dateName);
tempArr.push(locdate);
tempArr.push(holiArr);
// To check left holiday
var check = false;
for (var i = 0; i < locdate.length; i++) {
if (cmpDate(locdate[i])) {
check = true;
tempArr.push(dateName[i]); // Get recent holiday name
tempArr.push(locdate[i]); // Get recent holiday date
tempArr.push(holiArr[i]); // Get leftDate through locdate
break;
}
}
console.log(tempArr);
if (!check) {
// If there are no holidays left this month
console.log(
"이번 달에는 남은 공휴일이 없습니다. 다음달 데이터를 불러옵니다."
);
// Get next month data
month = String(Number(month) + 1).padStart(2, "0");
changeParams(year, month, operation);
getData();
}
console.log("* api로부터 데이터를 불러왔습니다.");
console.log("오늘의 날짜는", getTodayDate(), "입니다.");
console.log(
"가장 가까운 공휴일인 [" +
tempArr[0] +
"]의 날짜는 [" +
tempArr[1] +
"]이고, [" +
tempArr[2] +
"]일 남았습니다."
);
});
}
}
});
}
// To initialize datas when calling webpage
function init() {
// Intialize Year, Month
var date = getTodayDate().split("-");
year = date[0];
month = date[1];
operation = "getHoliDeInfo";
changeParams(year, month, operation);
// Get data from holiday api
getData();
}
app.get("/", function (req, res) {
init();
// Send data from nodejs to ejs
......@@ -155,5 +186,5 @@ app.get("/", function (req, res) {
init();
const port = 8080;
const port = 8888;
app.listen(port, () => console.log("Listening on port " + port));
......
......@@ -9,10 +9,8 @@
<title>Document</title>
</head>
<body>
<% for(var i = 0; i < data[0].length; i++) {%>
<p>
<h1><%= data[0][i] %> <%= data[1][i] %> <%= data[2][i] %>일 남았습니다.</h1>
</p>
<% } %>
<p>
<h1>[<%= data[0] %>]까지 <%= data[2] %>일 남았습니다. (<%= data[1] %>)</h1>
</p>
</body>
</html>
\ No newline at end of file
......