송민석

Collect DB data

Showing 1 changed file with 170 additions and 5 deletions
1 -const config =require('./config') 1 +const config = require('./config')
2 const mongoose = require("mongoose"); 2 const mongoose = require("mongoose");
3 -const connect = mongoose 3 +const { range } = require("express/lib/request");
4 - .connect(config.url, { 4 +const xlsx = require("xlsx");
5 +
6 +const excelFile = xlsx.readFile("./GuideLine/컴퓨터공학과 권장이수 가이드라인.xlsx");
7 +
8 +const sheetName = excelFile.SheetNames[0];
9 +const firstSheet = excelFile.Sheets[sheetName];
10 +const jsonData = xlsx.utils.sheet_to_json(firstSheet);
11 +
12 +var first_first = [];
13 +var first_second = [];
14 +var second_first = [];
15 +var second_second = [];
16 +var third_first = [];
17 +var third_second = [];
18 +var fourth_first = [];
19 +var fourth_second = [];
20 +var new_list = [];
21 +function jason_to_arry() {
22 + for (var data in jsonData) {
23 + first_first.push(jsonData[data]['1학년 1학기']);
24 + first_second.push(jsonData[data]['1학년 2학기']);
25 + second_first.push(jsonData[data]['2학년 1학기']);
26 + second_second.push(jsonData[data]['2학년 2학기']);
27 + third_first.push(jsonData[data]['3학년 1학기']);
28 + third_second.push(jsonData[data]['3학년 2학기']);
29 + fourth_first.push(jsonData[data]['4학년 1학기']);
30 + fourth_second.push(jsonData[data]['4학년 2학기']);
31 + }
32 +}
33 +// jason -> array로 변경
34 +function remove_null() {
35 + first_first = first_first.filter(function (item) {
36 + return item !== null && item !== undefined && item !== '';
37 + });
38 + first_second = first_second.filter(function (item) {
39 + return item !== null && item !== undefined && item !== '';
40 + });
41 + second_first = second_first.filter(function (item) {
42 + return item !== null && item !== undefined && item !== '';
43 + });
44 + second_second = second_second.filter(function (item) {
45 + return item !== null && item !== undefined && item !== '';
46 + });
47 + third_first = third_first.filter(function (item) {
48 + return item !== null && item !== undefined && item !== '';
49 + });
50 + third_second = third_second.filter(function (item) {
51 + return item !== null && item !== undefined && item !== '';
52 + });
53 + fourth_first = fourth_first.filter(function (item) {
54 + return item !== null && item !== undefined && item !== '';
55 + });
56 + fourth_second = fourth_second.filter(function (item) {
57 + return item !== null && item !== undefined && item !== '';
58 + });
59 + new_list.push(first_first);
60 + new_list.push(first_second)
61 + new_list.push(second_first)
62 + new_list.push(second_second);
63 + new_list.push(third_first)
64 + new_list.push(third_second);
65 + new_list.push(fourth_first);
66 + new_list.push(fourth_second);
67 +}
68 +// null 값 제거
69 +
70 +jason_to_arry()
71 +remove_null()
72 +
73 +
74 +const connect = mongoose.connect(config.url,
75 + {
5 useNewUrlParser: true, 76 useNewUrlParser: true,
6 useUnifiedTopology: true, 77 useUnifiedTopology: true,
7 }) 78 })
8 - .then(() => console.log("MongoDB Connected ..."))
9 - .catch((err) => console.log(err));
...\ No newline at end of file ...\ No newline at end of file
79 + .then(() => console.log("DB : Succesfully Connected"))
80 + .catch((err) => console.log(err.message));
81 +
82 +
83 +var express = require('express');
84 +
85 +var major_list = ["A07337", "A10628", "A07308", "A10627"];
86 +
87 +
88 +const { Subinfo } = require('./models/model');
89 +var request = require('request');
90 +for (i in major_list) {
91 + var options = {
92 + 'method': 'GET',
93 + 'url': `https://sugang.khu.ac.kr/core?attribute=lectListJson&lang=ko&loginYn=N&menu=1&p_major=${i}&p_year=2022&p_term=10&initYn=Y`,
94 + 'headers': {
95 + 'Cookie': 'JSESSIONID=aHGSkYnn7ZmXH5Wgx8So3tatw4J7LyR5g98tqYffSUU7qPhC7FFjOaemFCb8UgU5.amV1c19kb21haW4vV0hfU3VnYW5nMQ==; WMONID=R84FN19dbP4'
96 + },
97 + formData: {
98 + 'attribute': 'lectListJson',
99 + 'lang': 'ko',
100 + 'loginYn': 'N',
101 + 'menu': '1',
102 + 'p_major': 'A07308',
103 + 'p_year': '2022',
104 + 'p_term': '10',
105 + 'initYn': 'Y'
106 + }
107 + };
108 + request(options, async function (error, response) {
109 + if (error) throw new Error(error);
110 + var jason = response.body
111 + var json = JSON.parse(jason)
112 +
113 + const data = {}
114 +
115 +
116 + var x = 0, y = 0;
117 + var z = '필수';
118 + for (var i = 0; i < new_list.length; i++) {
119 + if (i % 2 == 0) {
120 + x++;
121 + }
122 + for (var j = 0; j < new_list[i].length; j++) {
123 + if (new_list[i][j] == '선택') {
124 + z = '선택';
125 + continue;
126 + }
127 + if (i % 2 == 0) {
128 + y = 1;
129 + } else {
130 + y = 2;
131 + }
132 + var subinfo = new Subinfo({
133 + campus: "국제",
134 + college: "소프트웨어융합대학",
135 + department: "컴퓨터공학과",
136 + grade: x + "학년" + y + "학기",
137 + name: new_list[i][j],
138 + choice: z
139 + })
140 + subinfo.save((err, result) => {
141 + if (err) {
142 + return err;
143 + } else {
144 + // console.log(result);
145 + }
146 + })
147 + }
148 + }
149 + for (var i in json["rows"]) {
150 + var obj = {};
151 + obj['time'] = json["rows"][i]["timetable"];
152 + obj['prof'] = json["rows"][i]["teach_na"];
153 + obj['credit'] = json["rows"][i]["unit_num"];
154 + obj['name'] = json["rows"][i]["subjt_name"];
155 + await Subinfo.findOne({ name: obj['name'] }).then((sub) => {
156 + if (sub) {
157 + var body = {
158 + prof: obj['prof'],
159 + time: obj['time']
160 + }
161 + sub.credit = obj['credit']
162 + sub.subject.push(body);
163 + sub.save((err, result) => {
164 + if (err) {
165 + console.log(err)
166 + } else if (result) {
167 + console.log(result);
168 + }
169 + })
170 + }
171 + })
172 + }
173 + });
174 +};
...\ No newline at end of file ...\ No newline at end of file
......