Showing
5 changed files
with
53 additions
and
181 deletions
Presentation.pptx
deleted
100644 → 0
No preview for this file type
1 | + | ||
2 | + | ||
1 | # About the project | 3 | # About the project |
2 | -* 사용자가 본인의 캠퍼스, 단과대학, 학과, 학년학기를 순서대로 입력하면 경희대학교 학과 홈페이지의 권장이수체계도에서 제공하는 과목들의 개설시간을 고려한 시간표를 제공 | 4 | ++ 사용자가 본인의 캠퍼스, 단과대학, 학과, 학년학기를 순서대로 입력하면 경희대학교 학과 홈페이지의 권장이수체계도에서 제공하는 과목들의 개설시간을 고려한 시간표를 랜덤으로 제공함 |
5 | +마음에 들지 않는다면 시간표 재생성 가능 | ||
6 | + | ||
3 | 7 | ||
4 | ## 개발동기 | 8 | ## 개발동기 |
5 | -<<<<<<< HEAD | ||
6 | + 학기가 시작하기 전에, 많은 학생들이 경희대학교 학과 홈페이지에서 권장하는 이수체계도를 참고하지만 매번 확인이 번거롭고, 무엇보다 학기마다 전공 과목의 개설시간과 교수님 등의 정보가 바뀌어서 매 학기마다 희망과목을 담기 전에 미리 시간을 확인하고 직접 예정시간표에 추가해서 따져보아야 한다. | 9 | + 학기가 시작하기 전에, 많은 학생들이 경희대학교 학과 홈페이지에서 권장하는 이수체계도를 참고하지만 매번 확인이 번거롭고, 무엇보다 학기마다 전공 과목의 개설시간과 교수님 등의 정보가 바뀌어서 매 학기마다 희망과목을 담기 전에 미리 시간을 확인하고 직접 예정시간표에 추가해서 따져보아야 한다. |
7 | -이러한 문제점으로, 학과 홈페이지에서 제공하는 권장이수체계도에 따른 전공과목을 미리 넣어둔 시간표를 알 수 있다면 편리할 것 같아 이 프로젝트를 고안 | ||
8 | - | ||
9 | -## 기대효과 | ||
10 | -+ 챗봇이 시간표 케이스들을 제공해준다면, 사용자는 남은 시간 자리에 원하는 과목(전공선택, 교양, 배분이수 등)을 추가하여 수월하게 시간표 경우의 수를 계산할 수 있음 | ||
11 | -======= | ||
12 | -학기가 시작하기 전에, 많은 학생들이 경희대학교 학과 홈페이지에서 권장하는 이수체계도를 참고하지만 매번 확인이 번거롭고, 무엇보다 학기마다 전공 과목의 개설시간과 교수님 등의 정보가 바뀌어서 매 학기마다 희망과목을 담기 전에 미리 시간을 확인하고 직접 예정시간표에 추가해서 따져보아야 한다. | ||
13 | 이러한 문제점으로, 학과 홈페이지에서 제공하는 권장이수체계도에 따른 전공과목을 미리 넣어둔 시간표를 알 수 있다면 편리할 것 같아 이 프로젝트를 고안함 | 10 | 이러한 문제점으로, 학과 홈페이지에서 제공하는 권장이수체계도에 따른 전공과목을 미리 넣어둔 시간표를 알 수 있다면 편리할 것 같아 이 프로젝트를 고안함 |
14 | 11 | ||
12 | + | ||
15 | ## 기대효과 | 13 | ## 기대효과 |
16 | -챗봇이 시간표 케이스들을 제공해준다면, 사용자는 남은 시간 자리에 원하는 과목(전공선택, 교양, 배분이수 등)을 추가하여 수월하게 시간표 경우의 수를 계산할 수 있음 | 14 | ++ 챗봇이 시간표 케이스들을 제공해준다면, 사용자는 남은 시간 자리에 원하는 과목(교양, 배분이수 등)을 추가하여 수월하게 시간표 경우의 수를 계산할 수 있음 |
17 | ->>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9 | 15 | + |
16 | + | ||
18 | 17 | ||
19 | -# Built | 18 | + |
20 | -* Node.js | 19 | +# Built With |
20 | +* [Node.js](https://nodejs.org/) | ||
21 | + | ||
22 | + | ||
23 | + | ||
24 | + | ||
25 | +# Getting Started | ||
26 | ++ 1. Clone the Repository | ||
27 | + ```sh | ||
28 | + git clone http://khuhub.khu.ac.kr/2019102206/time_table.git | ||
29 | + ``` | ||
30 | + | ||
31 | ++ 2 - npm install | ||
32 | + ```sh | ||
33 | + npm install | ||
34 | + ``` | ||
21 | 35 | ||
22 | 36 | ||
23 | -# How to Install | ||
24 | -1 - Clone Repository | ||
25 | -<span class="evidence">git clone http://khuhub.khu.ac.kr/2019102206/time_table.git</span> | ||
26 | 37 | ||
27 | -2 - npm install | ||
28 | -<span class="evidence">npm install</span> | ||
29 | 38 | ||
30 | # Usage | 39 | # Usage |
31 | 40 | ||
41 | + | ||
42 | + | ||
43 | + | ||
32 | # Roadmap | 44 | # Roadmap |
33 | -* [x] 학과별 권장이수체계도 정보 담긴 파일 생성 | 45 | +* [x] 학과별 권장이수체계도 정보 파일 생성 |
34 | -* [x] info21 및 수강신청사이트에서 학과 과목 정보 등 데이터 크롤링 | 46 | +* [x] Data crawling |
35 | -* [x] 크롤링한 정보 데이터화하기 (node.js) | 47 | +* [x] 크롤링 정보 데이터화(with node.js) |
36 | * [x] DB 작업 | 48 | * [x] DB 작업 |
37 | -* [ ] 권장이수체계에 맞는 시간표 랜덤 생성 | 49 | +* [x] 권장이수체계에 맞는 시간표 랜덤 생성 |
38 | -* [ ] 시간표 추천 챗봇 구현 | 50 | +* [x] Chatbot 구현(Deme) |
51 | +* [ ] 확장 | ||
39 | (Demo 현재 소프트웨어융합대학 소속 학과만 제공) | 52 | (Demo 현재 소프트웨어융합대학 소속 학과만 제공) |
40 | 53 | ||
54 | + | ||
55 | + | ||
56 | + | ||
41 | # Contributing | 57 | # Contributing |
42 | -<<<<<<< HEAD | ||
43 | -* 1 fork the project | ||
44 | -* 2 feature 브랜치 생성 및 변경 (git checkout feature/{function}) | ||
45 | -* 3 변경사항 commit (git commit -m "") | ||
46 | -* 4 원격 브랜치로 push (git push origin feature/{function}) | ||
47 | -* 5 pull request 요청 | ||
48 | -======= | ||
49 | * Fork the project | 58 | * Fork the project |
50 | -* feature 브랜치 생성 (git checkout -b feature/{function}) | 59 | +* Create your Feature Branch(git checkout -b feature/{function}) |
51 | -* 변경사항 commit (git commit -m 'Add some function) | 60 | +* Commit your Changes (git commit -m 'Add some function) |
52 | -* remote branch로 push (git push origin feature/{function}) | 61 | +* Push to the Branch (git push origin feature/{function}) |
53 | -* pull request 요청 | 62 | +* Open a Pull Request |
54 | ->>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9 | 63 | + |
64 | + | ||
65 | + | ||
55 | 66 | ||
56 | # License | 67 | # License |
57 | [MIT LICENSE](LICENSE) | 68 | [MIT LICENSE](LICENSE) |
58 | 69 | ||
70 | + | ||
71 | + | ||
72 | + | ||
59 | # Contact | 73 | # Contact |
60 | * 곽병민 : bqudmals@khu.ac.kr | 74 | * 곽병민 : bqudmals@khu.ac.kr |
61 | * 송민석 : songms0909@khu.ac.kr | 75 | * 송민석 : songms0909@khu.ac.kr |
62 | * 이나경 : 2000skrud@khu.ac.kr | 76 | * 이나경 : 2000skrud@khu.ac.kr |
63 | -* Link : http://khuhub.khu.ac.kr/2019102206/time_table | 77 | + |
78 | +* Project Link | ||
79 | + | ||
80 | +[http://khuhub.khu.ac.kr/2019102206/time_table] | ||
81 | +(http://khuhub.khu.ac.kr/2019102206/time_table) | ... | ... |
chatbot.js
deleted
100644 → 0
1 | -<<<<<<< HEAD:index.js | ||
2 | -======= | ||
3 | -<<<<<<< HEAD:chatbot.js | ||
4 | -var express = require('express'); | ||
5 | -const request = require('request'); | ||
6 | -const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' | ||
7 | -const TOKEN = '' | ||
8 | -const fs = require('fs'); | ||
9 | -const path = require('path'); | ||
10 | -const HTTPS = require('https'); | ||
11 | -const domain = "" | ||
12 | -const sslport = 23023; | ||
13 | - | ||
14 | -const bodyParser = require('body-parser'); | ||
15 | -var app = express(); | ||
16 | -app.use(bodyParser.json()); | ||
17 | - | ||
18 | - | ||
19 | -ID_data_array = [] | ||
20 | - | ||
21 | -app.post('/hook', function (req, res) { | ||
22 | - | ||
23 | - var eventObj = req.body.events[0]; | ||
24 | - var source = eventObj.source; | ||
25 | - var message = eventObj.message; | ||
26 | - | ||
27 | - var user_ID = eventObj.source['userId'] | ||
28 | - var data = eventObj.message['text'] | ||
29 | - if (ID_data_array.length == 0) { | ||
30 | - ID_data_array.push([user_ID]) | ||
31 | - ID_data_array[0].push(data) | ||
32 | - } | ||
33 | - else { | ||
34 | - var find = 0 | ||
35 | - for (var i in ID_data_array) { | ||
36 | - if (ID_data_array[i][0] == user_ID) { | ||
37 | - find = 1 | ||
38 | - if (ID_data_array[i].length < 4) { | ||
39 | - ID_data_array[i].push(data) | ||
40 | - } | ||
41 | - else { | ||
42 | - ID_data_array[i] = [user_ID]; | ||
43 | - ID_data_array[i].push(data); | ||
44 | - } | ||
45 | - } | ||
46 | - } | ||
47 | - if (find == 0) { | ||
48 | - ID_data_array.push([user_ID]); | ||
49 | - ID_data_array[ID_data_array.length-1].push(data); | ||
50 | - } | ||
51 | - } | ||
52 | - | ||
53 | - // request log | ||
54 | - console.log('======================', new Date() ,'======================'); | ||
55 | - console.log('[request]', req.body); | ||
56 | - console.log('[request source] ', eventObj.source); | ||
57 | - console.log('[request message]', eventObj.message); | ||
58 | - | ||
59 | - console.log(ID_data_array) | ||
60 | - for (var i in ID_data_array) { | ||
61 | - console.log(ID_data_array[i]) | ||
62 | - } | ||
63 | - | ||
64 | - | ||
65 | - request.post( | ||
66 | - { | ||
67 | - url: TARGET_URL, | ||
68 | - headers: { | ||
69 | - 'Authorization': `Bearer ${TOKEN}` | ||
70 | - }, | ||
71 | - json: { | ||
72 | - "replyToken":eventObj.replyToken, | ||
73 | - "messages":[ | ||
74 | - { | ||
75 | - "type":"text", | ||
76 | - "text":"Hello, user" | ||
77 | - }, | ||
78 | - { | ||
79 | - "type":"text", | ||
80 | - "text":"May I help you?" | ||
81 | - } | ||
82 | - ] | ||
83 | - } | ||
84 | - },(error, response, body) => { | ||
85 | - console.log(body) | ||
86 | - }); | ||
87 | - | ||
88 | - | ||
89 | - res.sendStatus(200); | ||
90 | - | ||
91 | - if (data.length >= 3) { | ||
92 | - data = [] | ||
93 | - } | ||
94 | -}); | ||
95 | - | ||
96 | - | ||
97 | -try { | ||
98 | - const option = { | ||
99 | - ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'), | ||
100 | - key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(), | ||
101 | - cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(), | ||
102 | - }; | ||
103 | - | ||
104 | - HTTPS.createServer(option, app).listen(sslport, () => { | ||
105 | - console.log(`[HTTPS] Server is started on port ${sslport}`); | ||
106 | - }); | ||
107 | - } catch (error) { | ||
108 | - console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); | ||
109 | - console.log(error); | ||
110 | - } | ||
111 | -======= | ||
112 | ->>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9:chatbot.js | ||
113 | - | ||
114 | -const config =require('./config') | ||
115 | -const mongoose = require("mongoose"); | ||
116 | -const connect = mongoose.connect(config.url, | ||
117 | - { | ||
118 | - useNewUrlParser: true, | ||
119 | - useUnifiedTopology: true, | ||
120 | - }) | ||
121 | - .then(() => console.log("DB : Succesfully Connected")) | ||
122 | - .catch((err) => console.log(err.message)); | ||
123 | - | ||
124 | - | ||
125 | -/* | ||
126 | -const { MongoClient } = require("mongodb"); | ||
127 | -const config =require('./config') | ||
128 | -const client = new MongoClient(config.url); | ||
129 | -async function run() { | ||
130 | - try { | ||
131 | - await client.connect(); | ||
132 | - console.log("Connected correctly to server"); | ||
133 | - } catch (err) { | ||
134 | - console.log(err.stack); | ||
135 | - } | ||
136 | - finally { | ||
137 | - await client.close(); | ||
138 | - } | ||
139 | -} | ||
140 | -run().catch(console.dir); | ||
141 | -<<<<<<< HEAD:index.js | ||
142 | -*/ | ||
143 | -======= | ||
144 | -*/ | ||
145 | ->>>>>>> 86b0ca0 (Modify index.js file):index.js | ||
146 | ->>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9:chatbot.js |
img/KHUchedule.png
0 → 100644

1.24 KB
img/logo.jpeg
0 → 100644

41.2 KB
-
Please register or login to post a comment