유영빈

컨트롤러 전체 레파지토리 커밋

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
BusTime @ 75a66710
1 +Subproject commit 75a66710c60b7112cdbff1ba402bdf83c0b38494
1 +const express = require("express");
2 +var app = express();
3 +http = require('http').createServer(app);
4 +port = 23023;
5 +
6 +app.use(express.static(__dirname + "/views"));
7 +const routes = require("./routes/");
8 +app.use(routes)
9 +
10 +app.use((err,req,res,next) => {
11 + const {status,message} = err
12 + console.error(err)
13 + res.status(status||500).json({message})
14 +})
15 +
16 +var server = http.listen(port, function(){
17 + console.log(`http://localhost:${port}`);
18 +})
...\ No newline at end of file ...\ No newline at end of file
1 +let request = require('request');
2 +let cheerio = require('cheerio');
3 +const bus_url = 'http://apis.data.go.kr/6410000/busarrivalservice/getBusArrivalList';
4 +//const stationID = '228000708'; // 사색의광장 들어오는 방향
5 +const gateStationID = '203000125'
6 +require('dotenv').config();
7 +//const BusArrivalUrl = bus_url + '?servicekey=' + process.env.key + '&stationId=' + stationID;// 사색의광장 정류장 버스 도착 정보 조회용
8 +//console.log(BusArrivalUrl);
9 +var routeID = ['200000112', '200000115', '234000016', '200000103'];
10 +var Bus = [];
11 +// request(BusArrivalUrl, (err, res, body) => {
12 +// var $ = cheerio.load(body, {decodeEntities: false});
13 +// $('busArrivalList').each(function(idx){
14 +// let route = $(this).find('routeId').text();
15 +// routeID.push(route);
16 +// })
17 +// //console.log(routeID);
18 +// })
19 +const route_url = 'http://apis.data.go.kr/6410000/busrouteservice/getBusRouteInfoItem';
20 +var index = 0;
21 +function getBusNum(){
22 + var BusRouteUrl = route_url + '?servicekey=' + process.env.key + '&routeId='; // 각 버스 정보 조회용
23 + BusRouteUrl += routeID[index++];
24 + //console.log(BusRouteUrl);
25 + request(BusRouteUrl, (err, res, body) => {
26 + var $ = cheerio.load(body, {decodeEntities: false});
27 + $('busRouteInfoItem').each(function(idx){
28 + var id = $(this).find('routeId').text(); //버스 노선 id
29 + var num = $(this).find('routeName').text(); //버스 번호
30 + var firsttime = $(this).find('upFirstTime').text(); //평일 기점 첫차시간
31 + var lasttime = $(this).find('upLastTime').text(); //평일 기점 막차 시간
32 + var mintime = $(this).find('peekAlloc').text(); //평일 최소 배차시간
33 + var maxtime = $(this).find('nPeekAlloc').text(); //평일 최대 배차시간
34 + //var idx = Bus.findIndex((item, idx) => { return item.routeId = id})
35 + var newBus = new Object();
36 + newBus.routeId = id;
37 + newBus.BusNum = num;
38 + newBus.FirstTime = firsttime;
39 + newBus.LastTime = lasttime;
40 + newBus.MinTime = mintime;
41 + newBus.MaxTime = maxtime;
42 + console.log(newBus);
43 + Bus.push(newBus);
44 + console.log(Bus);
45 + })
46 + })
47 +}
48 +for(var i=0; i<routeID.length; i++){
49 + getBusNum();
50 +}
51 +const GateBusUrl = bus_url + '?servicekey=' + process.env.key + '&stationId=' + gateStationID; //국제캠 정문 정류장
52 +let date = new Date();
53 +let predictTime = ['-1', '-1', '-1', '-1'];
54 +let body = new Object();
55 +function predict(){
56 + console.log(GateBusUrl);
57 + request(GateBusUrl, (err, res, body) => {
58 + var $ = cheerio.load(body, {decodeEntities: false});
59 + $('busArrivalList').each(function(idx){
60 + let route = $(this).find('routeId').text();
61 + var index = Bus.findIndex(function(e, idx){ return e.routeId == route;});
62 + if(index > -1){
63 + //var num = $(this).find('plateNo1').text(); // 버스 차량번호 ex) 70사 1290
64 + var time = $(this).find('predictTime1').text(); // 버스 예상 도착시간
65 + var predictHour1 = date.getHours();
66 + var predictMinute1 = date.getMinutes() + Bus[index].mintime - (3 - (time*1)); // 사색의 광장 -> 경희대학교 3분정도 소요
67 + var predictHour2 = date.getHours();
68 + var predictMinute2 = date.getMinutes() + Bus[index].maxtime - (3 - (time*1)); // time*1 : string to integer 형변환
69 + if(predictMinute1 >= 60){
70 + predictHour1 += 1;
71 + predictMinute1 -= 60;
72 + }
73 + if(predictMinute2 >= 60){
74 + predictHour2 += 1;
75 + predictMinute2 -= 60;
76 + }
77 + Bus[index]["MinPredictTime"] = predictHour1 + ":" + predictMinute1;
78 + Bus[index]["MaxPredictTime"] = predictHour2 + ":" + predictMinute2;
79 + predictTime = [predictHour1 + "", predictMinute1 + "", predictHour2 + "", predictMinute2 + ""]
80 + const dateBusDeparture = new Date(date.getFullYear(), date.getMonth(), date.getDate(), predictTime[0]*1, predictTime[1]*1, 0);
81 + var gapSec = (dateBusDeparture.getTime() - date.getTime())/1000;
82 + var gapHour = Math.floor(gapSec / 60 / 60);
83 + var gapMin = Math.floor((gapSec - gapHour * 3600) / 60);
84 + // var ans = gapHour + "시간" + gapMin + "분 이상";
85 + // var ETD_min_H = predictTime[0];
86 + // var ETD_min_M = predictTime[1];
87 + // var ETD_max_H = predictTime[2];
88 + // var ETD_max_M = predictTime[3];
89 +
90 +
91 + //controller에 데이터 전송
92 + module.exports.data = {};
93 + module.exports.data.remainTime = gapHour + "시간" + gapMin + "분 이상";
94 + module.exports.data.ETD_min_H = predictTime[0];
95 + module.exports.data.ETD_min_M = predictTime[1];
96 + module.exports.data.ETD_max_H = predictTime[2];
97 + module.exports.data.ETD_max_M = predictTime[3];
98 +
99 +
100 + }
101 + })
102 + })
103 +}
104 +
105 +
106 +
107 +function start(){
108 + setInterval(predict, 60000);
109 +}
110 +setTimeout(start, 20000);
1 +var express = require('express');
2 +var app = express();
3 +var fs = require('fs')
4 +var Businfo = require("../models/BusInfo");
5 +
6 +app.set('views',__dirname+'/views');
7 +app.set('view engine', 'ejs');
8 +app.engine('html',require('ejs').renderFile);
9 +app.engine('ejs', require('ejs').renderFile);
10 +
11 +exports.mainView = function(req, res) {
12 + res.render("./views/ejstest.ejs", "utf8", function(err,buf){
13 + res.end(buf); //render 함수로 ejs 파일 렌더링 할 예정. index.ejs
14 + })
15 +}
16 +
17 +exports.timeTable = function(req, res) {
18 + res.render("ejstest",{busNum:req.query.busNum, remainTime: Businfo.data.remainTime, ETD_min_H: Businfo.data.ETD_min_H,
19 + ETD_min_m: Businfo.data.ETD_max_m, ETD_max_H: Businfo.data.ETD_max_H, ETD_max_m: Businfo.data.ETD_max_m });
20 +}
21 +
22 +
1 +const router = require("express").Router();
2 +const controller = require("./controller");
3 +
4 +router.get("/", controller.mainView); //main 페이지
5 +router.get("/timetable", controller.timeTable); //timetable 페이지
6 +
7 +
8 +module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
1 +<!doctype html>
2 +<html>
3 +<head>
4 + <title>BUS TT</title>
5 + <meta charset="utf-8">
6 + <style type="text/css">
7 + a { text-decoration:none } /* 하이퍼링크 밑줄 미적용
8 + a { color:red; text-decoration:none} : 색깔 변화없음
9 + */
10 + </style>
11 +</head>
12 +
13 +<body>
14 + <h1><p style="text-align:center;">BTT</p></h1>
15 + <br>
16 + <h2> 사색의 광장 Bus Time Table 조회 서비스에 오신 것을 환영합니다.</h2>
17 + <p> 이곳에는 사색의 광장에서 출발하는 모든 버스의 정보가 있습니다.</p>
18 + <br><br>
19 + <h2> 버스별 시간표 조회</h2>
20 + <p> m월 d일 오늘 운행하는 버스들</p>
21 + <ul>
22 + <li><a href="http://localhost:23023/?busNum=5100">5100</a></li>
23 + <li><a href="http://localhost:23023/?busNum=M5107">M5107</a></li>
24 + <li><a href="http://localhost:23023/?busNum=9">9</a></li>
25 + <li><a href="http://localhost:23023/?busNum=7000">7000</a></li>
26 + <li>etc</li>
27 + </ul>
28 + <br>
29 + <p>설명</p>
30 +
31 +
32 +</body>
33 +</html>
1 +<!doctype html>
2 + <html>
3 + <head>
4 + <title>Time Table</title>
5 + <meta charset="utf-8">
6 + <style type="text/css">
7 + a { text-decoration:none }
8 + </style>
9 + </head>
10 +
11 + <body>
12 + <h1><a href="/"><p style="text-align:center;">BTT</p></a></h1>
13 + <br> <div style="padding:0 0 0 20px;">
14 + <h2> <%= busNum %> BUS Time Table</h2>
15 + </div>
16 + <div style="padding:0 0 0 20px;">
17 + <table border="3" width="400">
18 + <th> Index</th>
19 + <th> 출발 예정시간</th>
20 + <th> 남은 시간</th>
21 + <tr align="center">
22 + <td> text입력하기 </td>
23 + <td> <%= ETD_min_H %>:<%= ETD_min_m %> ~ <%= ETD_max_H %>:<%= ETD_max_m %> </td>
24 + <td> <%= remainTime %> </td>
25 + </tr>
26 + </table>
27 + </div>
28 + <br>
29 + <br>
30 + <p> <div style="padding:0 0 0 20px;">
31 + 버스의 평균 배차시간을 기준으로 최소 출발시간과 최대 출발시간을 제공합니다.
32 + </div> </p>
33 + <div style="padding:0 0 0 20px;">
34 + <% var date = new Date(); %>
35 + <% var yyyy = date.getFullYear(); %>
36 + <% var mm1 = date.getMonth() + 1; %>
37 + <% var dd = date.getDate(); %>
38 + <% var hh = date.getHours(); %>
39 + <% var mm2 = date.getMinutes(); %>
40 +
41 + <% document.write(yyyy+"년 "+mm1+"월 "+dd+"일 "); %>
42 + <% document.write(hh+"시 "+mm2+"분 기준"); %>
43 + </div>
44 + </body>
45 + </html>
...\ No newline at end of file ...\ No newline at end of file
1 +<!doctype html>
2 +<html>
3 +<head>
4 + <title>BUS TT</title>
5 + <meta charset="utf-8">
6 + <style type="text/css">
7 + a { text-decoration:none }
8 + </style>
9 +</head>
10 +<body>
11 + <h1><p style="text-align:center;">BTT</p></h1>
12 + <br>
13 + <link rel='stylesheet' type='text/css' href='/css/style.css' />
14 + <h2> 사색의 광장 Bus Time Table 조회 서비스에 오신 것을 환영합니다.</h2>
15 + <p> 이곳에는 사색의 광장에서 출발하는 모든 버스의 정보가 있습니다.</p>
16 + <br><br>
17 + <h2> 버스별 시간표 조회</h2>
18 +
19 + <div style="padding:0 0 0 20px;">
20 + <% var date = new Date(); %>
21 + <% var yyyy = date.getFullYear(); %>
22 + <% var mm1 = date.getMonth() + 1; %>
23 + <% var dd = date.getDate(); %>
24 + <% var hh = date.getHours(); %>
25 + <% var mm2 = date.getMinutes(); %>
26 +
27 + <% document.write(yyyy+"년 "+mm1+"월 "+dd+"일 오늘 운행하는 버스들 "); %>
28 + <% document.write("( "+hh+"시 "+mm2+"분 기준 )"); %>
29 + </div>
30 + <ul>
31 + <li><a href="http://localhost:23023/timetable?busNum=5100">5100</a></li>
32 + <li><a href="http://localhost:23023/timetable?busNum=M5107">M5107</a></li>
33 + <li><a href="http://localhost:23023/timetable?busNum=9">9</a></li>
34 + <li><a href="http://localhost:23023/timetable?busNum=7000">7000</a></li>
35 + <li>etc</li>
36 + </ul>
37 + <br>
38 + <p>설명</p>
39 +</body>
40 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<!-- 이 문서는 base.js에 timetableHTML로 저장되어 있음. 따라서 이 문서는 직접적으로 사용하지 않음-->
2 +
3 +<!doctype html>
4 +<html>
5 +<head>
6 + <title>Time Table</title>
7 + <meta charset="utf-8">
8 + <style type="text/css">
9 + a { text-decoration:none }
10 + </style>
11 +</head>
12 +
13 +<body>
14 + <h1><a href="Index.html"><p style="text-align:center;">BTT</p></a></h1>
15 + <br>
16 + <h2>0000 BUS Time Table</h2>
17 + <p> 타임테이블 출력 ~~~~ </p>
18 +</body>
19 +</html>