송민석

Modify README.md file / Organized and Insert logo image etc

No preview for this file type
![logo](./img/logo.jpeg)
# About the project
* 사용자가 본인의 캠퍼스, 단과대학, 학과, 학년학기를 순서대로 입력하면 경희대학교 학과 홈페이지의 권장이수체계도에서 제공하는 과목들의 개설시간을 고려한 시간표를 제공
+ 사용자가 본인의 캠퍼스, 단과대학, 학과, 학년학기를 순서대로 입력하면 경희대학교 학과 홈페이지의 권장이수체계도에서 제공하는 과목들의 개설시간을 고려한 시간표를 랜덤으로 제공함
마음에 들지 않는다면 시간표 재생성 가능
## 개발동기
<<<<<<< HEAD
+ 학기가 시작하기 전에, 많은 학생들이 경희대학교 학과 홈페이지에서 권장하는 이수체계도를 참고하지만 매번 확인이 번거롭고, 무엇보다 학기마다 전공 과목의 개설시간과 교수님 등의 정보가 바뀌어서 매 학기마다 희망과목을 담기 전에 미리 시간을 확인하고 직접 예정시간표에 추가해서 따져보아야 한다.
이러한 문제점으로, 학과 홈페이지에서 제공하는 권장이수체계도에 따른 전공과목을 미리 넣어둔 시간표를 알 수 있다면 편리할 것 같아 이 프로젝트를 고안
## 기대효과
+ 챗봇이 시간표 케이스들을 제공해준다면, 사용자는 남은 시간 자리에 원하는 과목(전공선택, 교양, 배분이수 등)을 추가하여 수월하게 시간표 경우의 수를 계산할 수 있음
=======
학기가 시작하기 전에, 많은 학생들이 경희대학교 학과 홈페이지에서 권장하는 이수체계도를 참고하지만 매번 확인이 번거롭고, 무엇보다 학기마다 전공 과목의 개설시간과 교수님 등의 정보가 바뀌어서 매 학기마다 희망과목을 담기 전에 미리 시간을 확인하고 직접 예정시간표에 추가해서 따져보아야 한다.
이러한 문제점으로, 학과 홈페이지에서 제공하는 권장이수체계도에 따른 전공과목을 미리 넣어둔 시간표를 알 수 있다면 편리할 것 같아 이 프로젝트를 고안함
## 기대효과
챗봇이 시간표 케이스들을 제공해준다면, 사용자는 남은 시간 자리에 원하는 과목(전공선택, 교양, 배분이수 등)을 추가하여 수월하게 시간표 경우의 수를 계산할 수 있음
>>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9
+ 챗봇이 시간표 케이스들을 제공해준다면, 사용자는 남은 시간 자리에 원하는 과목(교양, 배분이수 등)을 추가하여 수월하게 시간표 경우의 수를 계산할 수 있음
# Built
* Node.js
# Built With
* [Node.js](https://nodejs.org/)
# Getting Started
+ 1. Clone the Repository
```sh
git clone http://khuhub.khu.ac.kr/2019102206/time_table.git
```
+ 2 - npm install
```sh
npm install
```
# How to Install
1 - Clone Repository
<span class="evidence">git clone http://khuhub.khu.ac.kr/2019102206/time_table.git</span>
2 - npm install
<span class="evidence">npm install</span>
# Usage
# Roadmap
* [x] 학과별 권장이수체계도 정보 담긴 파일 생성
* [x] info21 및 수강신청사이트에서 학과 과목 정보 등 데이터 크롤링
* [x] 크롤링한 정보 데이터화하기 (node.js)
* [x] 학과별 권장이수체계도 정보 파일 생성
* [x] Data crawling
* [x] 크롤링 정보 데이터화(with node.js)
* [x] DB 작업
* [ ] 권장이수체계에 맞는 시간표 랜덤 생성
* [ ] 시간표 추천 챗봇 구현
* [x] 권장이수체계에 맞는 시간표 랜덤 생성
* [x] Chatbot 구현(Deme)
* [ ] 확장
(Demo 현재 소프트웨어융합대학 소속 학과만 제공)
# Contributing
<<<<<<< HEAD
* 1 fork the project
* 2 feature 브랜치 생성 및 변경 (git checkout feature/{function})
* 3 변경사항 commit (git commit -m "")
* 4 원격 브랜치로 push (git push origin feature/{function})
* 5 pull request 요청
=======
* Fork the project
* feature 브랜치 생성 (git checkout -b feature/{function})
* 변경사항 commit (git commit -m 'Add some function)
* remote branch로 push (git push origin feature/{function})
* pull request 요청
>>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9
* Create your Feature Branch(git checkout -b feature/{function})
* Commit your Changes (git commit -m 'Add some function)
* Push to the Branch (git push origin feature/{function})
* Open a Pull Request
# License
[MIT LICENSE](LICENSE)
# Contact
* 곽병민 : bqudmals@khu.ac.kr
* 송민석 : songms0909@khu.ac.kr
* 이나경 : 2000skrud@khu.ac.kr
* Link : http://khuhub.khu.ac.kr/2019102206/time_table
* Project Link
[http://khuhub.khu.ac.kr/2019102206/time_table]
(http://khuhub.khu.ac.kr/2019102206/time_table)
......
<<<<<<< HEAD:index.js
=======
<<<<<<< HEAD:chatbot.js
var express = require('express');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = ''
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = ""
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
ID_data_array = []
app.post('/hook', function (req, res) {
var eventObj = req.body.events[0];
var source = eventObj.source;
var message = eventObj.message;
var user_ID = eventObj.source['userId']
var data = eventObj.message['text']
if (ID_data_array.length == 0) {
ID_data_array.push([user_ID])
ID_data_array[0].push(data)
}
else {
var find = 0
for (var i in ID_data_array) {
if (ID_data_array[i][0] == user_ID) {
find = 1
if (ID_data_array[i].length < 4) {
ID_data_array[i].push(data)
}
else {
ID_data_array[i] = [user_ID];
ID_data_array[i].push(data);
}
}
}
if (find == 0) {
ID_data_array.push([user_ID]);
ID_data_array[ID_data_array.length-1].push(data);
}
}
// request log
console.log('======================', new Date() ,'======================');
console.log('[request]', req.body);
console.log('[request source] ', eventObj.source);
console.log('[request message]', eventObj.message);
console.log(ID_data_array)
for (var i in ID_data_array) {
console.log(ID_data_array[i])
}
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages":[
{
"type":"text",
"text":"Hello, user"
},
{
"type":"text",
"text":"May I help you?"
}
]
}
},(error, response, body) => {
console.log(body)
});
res.sendStatus(200);
if (data.length >= 3) {
data = []
}
});
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
};
HTTPS.createServer(option, app).listen(sslport, () => {
console.log(`[HTTPS] Server is started on port ${sslport}`);
});
} catch (error) {
console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
console.log(error);
}
=======
>>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9:chatbot.js
const config =require('./config')
const mongoose = require("mongoose");
const connect = mongoose.connect(config.url,
{
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => console.log("DB : Succesfully Connected"))
.catch((err) => console.log(err.message));
/*
const { MongoClient } = require("mongodb");
const config =require('./config')
const client = new MongoClient(config.url);
async function run() {
try {
await client.connect();
console.log("Connected correctly to server");
} catch (err) {
console.log(err.stack);
}
finally {
await client.close();
}
}
run().catch(console.dir);
<<<<<<< HEAD:index.js
*/
=======
*/
>>>>>>> 86b0ca0 (Modify index.js file):index.js
>>>>>>> 3735c827bc42111514cee7214fd90eff8baa46a9:chatbot.js

41.2 KB