-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransportService.js
94 lines (82 loc) · 2.41 KB
/
transportService.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const request = require('request-promise')
const iconv = require('iconv-lite')
const messages = require('./messages')
const typesDict = ['авт', 'трол', 'трам', 'мар']
const busRoutes = ['35', '35d', '40k', '41', '41a', '41b', '42', '43', '44', '44k', '49', '55', '55k', '70', '72', '76', '78', '93g']
function getRouteInfo(route) {
const routeObj = parseRoute(route)
const { type, num } = routeObj
if (!isCorrectRoute(num) || !type) {
return new Promise(function (resolve, reject) {
reject(messages.notFound)
})
}
return request({
method: 'GET',
uri: `http://ot76.ru/mob/getroutestr.php?vt=${type}&nmar=${num}`,
encoding: null
})
.then(function (response) {
return iconv.decode(response, "win1251")
})
.catch(function (err) {
console.log(err)
})
}
function getForecast(link) {
return request({
method: 'GET',
uri: `http://ot76.ru/mob/${link}`,
encoding: null
})
.then(function (response) {
return iconv.decode(response, "win1251")
})
.catch(function (err) {
console.log(err)
})
}
function isCorrectRoute(route) {
return parseInt(route).toString() !== 'NaN'
}
function parseRoute(route) {
const splittedRoute = route.split(' ')
let num, type
const typeProvided = splittedRoute.length > 1;
if (typeProvided) {
const typeStr = splittedRoute[0]
typesDict.forEach((val, ind) => {
if (typeStr.includes(val)) {
type = ind + 1
}
})
num = prepareRouteStr(splittedRoute[splittedRoute.length - 1])
} else {
num = prepareRouteStr(route)
type = getTypeAutomatically(num)
}
return { num, type }
}
function prepareRouteStr(str) {
return str.trim()
.replace('а', 'a')
.replace('к', 'k')
.replace('в', 'v')
.replace('с', 'c')
.replace('б', 'b')
.replace('м', 'm')
.replace('г', 'g')
}
function getTypeAutomatically(numStr) {
const num = parseInt(numStr)
if (['1', '3', '4', '5', '7', '8', '9'].includes(numStr)) {
return 2
} else if (numStr === '5') {
return 3
} else if (num < 35 || busRoutes.includes(numStr)) {
return 1
} else {
return 4
}
}
module.exports = { getRouteInfo, getForecast }