hk-bus-eta 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fortuneferry.d.ts +11 -0
- package/dist/fortuneferry.js +70 -0
- package/dist/fortuneferry.js.map +1 -0
- package/dist/gmb.js +15 -12
- package/dist/gmb.js.map +1 -1
- package/dist/hkkf.d.ts +8 -0
- package/dist/hkkf.js +32 -0
- package/dist/hkkf.js.map +1 -0
- package/dist/index.js +14 -24
- package/dist/index.js.map +1 -1
- package/dist/sunferry.d.ts +7 -0
- package/dist/sunferry.js +38 -0
- package/dist/sunferry.js.map +1 -0
- package/dist/type.d.ts +3 -1
- package/esm/fortuneferry.d.ts +11 -0
- package/esm/fortuneferry.js +67 -0
- package/esm/fortuneferry.js.map +1 -0
- package/esm/gmb.js +15 -12
- package/esm/gmb.js.map +1 -1
- package/esm/hkkf.d.ts +8 -0
- package/esm/hkkf.js +29 -0
- package/esm/hkkf.js.map +1 -0
- package/esm/index.js +14 -24
- package/esm/index.js.map +1 -1
- package/esm/sunferry.d.ts +7 -0
- package/esm/sunferry.js +35 -0
- package/esm/sunferry.js.map +1 -0
- package/esm/type.d.ts +3 -1
- package/package.json +1 -1
- package/src/fortuneferry.ts +75 -0
- package/src/gmb.ts +2 -2
- package/src/hkkf.ts +40 -0
- package/src/index.ts +16 -30
- package/src/sunferry.ts +45 -0
- package/src/type.ts +5 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Eta, StopList } from "./type";
|
|
2
|
+
interface fetchEtasProps {
|
|
3
|
+
route: string;
|
|
4
|
+
stops: {
|
|
5
|
+
fortuneferry: string[];
|
|
6
|
+
};
|
|
7
|
+
seq: number;
|
|
8
|
+
stopList: StopList;
|
|
9
|
+
}
|
|
10
|
+
export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }: fetchEtasProps): Promise<Eta[]>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("./utils");
|
|
4
|
+
const getCode = (zhName) => {
|
|
5
|
+
if (zhName.includes("中環")) {
|
|
6
|
+
return "CL";
|
|
7
|
+
}
|
|
8
|
+
else if (zhName.includes("紅磡")) {
|
|
9
|
+
return "HH";
|
|
10
|
+
}
|
|
11
|
+
else if (zhName.includes("北角")) {
|
|
12
|
+
return "NP";
|
|
13
|
+
}
|
|
14
|
+
else if (zhName.includes("觀塘")) {
|
|
15
|
+
return "KT";
|
|
16
|
+
}
|
|
17
|
+
else if (zhName.includes("啟德")) {
|
|
18
|
+
return "KT";
|
|
19
|
+
}
|
|
20
|
+
else if (zhName.includes("屯門")) {
|
|
21
|
+
return "TM";
|
|
22
|
+
}
|
|
23
|
+
else if (zhName.includes("東涌")) {
|
|
24
|
+
return "TC";
|
|
25
|
+
}
|
|
26
|
+
else if (zhName.includes("沙螺灣")) {
|
|
27
|
+
return "SLW";
|
|
28
|
+
}
|
|
29
|
+
else if (zhName.includes("大澳")) {
|
|
30
|
+
return "TO";
|
|
31
|
+
}
|
|
32
|
+
return "CL";
|
|
33
|
+
};
|
|
34
|
+
function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }) {
|
|
35
|
+
if (stops.length === seq - 1)
|
|
36
|
+
return Promise.resolve([]);
|
|
37
|
+
const u = getCode(stopList[stops[seq]].name.zh);
|
|
38
|
+
const v = getCode(stopList[stops[seq + 1]].name.zh);
|
|
39
|
+
return fetch(`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`, {
|
|
40
|
+
cache: utils_1.isSafari ? "default" : "no-store",
|
|
41
|
+
})
|
|
42
|
+
.then((response) => response.json())
|
|
43
|
+
.then(({ data }) => {
|
|
44
|
+
if (!data)
|
|
45
|
+
return [];
|
|
46
|
+
return data
|
|
47
|
+
.map(({ depart_time, rmk_tc, rmk_en }) => {
|
|
48
|
+
const date = new Date();
|
|
49
|
+
let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
50
|
+
if ((new Date(guess)) < date) {
|
|
51
|
+
date.setDate(date.getDate() + 1);
|
|
52
|
+
guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
eta: guess,
|
|
56
|
+
remark: {
|
|
57
|
+
zh: rmk_tc,
|
|
58
|
+
en: rmk_en,
|
|
59
|
+
},
|
|
60
|
+
dest: {
|
|
61
|
+
zh: "",
|
|
62
|
+
en: "",
|
|
63
|
+
},
|
|
64
|
+
co: "fortuneferry",
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
exports.default = fetchEtas;
|
|
70
|
+
//# sourceMappingURL=fortuneferry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"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"}
|
package/dist/gmb.js
CHANGED
|
@@ -12,18 +12,21 @@ function fetchEtas({ gtfsId, stopId, bound, seq, }) {
|
|
|
12
12
|
.filter(({ stop_seq }) => stop_seq === seq + 1)
|
|
13
13
|
.reduce((acc, { eta }) => [
|
|
14
14
|
...acc,
|
|
15
|
-
...eta.map((data) =>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
15
|
+
...eta.map((data) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
return ({
|
|
18
|
+
eta: data.timestamp,
|
|
19
|
+
remark: {
|
|
20
|
+
zh: (_a = data.remarks_tc) !== null && _a !== void 0 ? _a : "",
|
|
21
|
+
en: (_b = data.remarks_en) !== null && _b !== void 0 ? _b : "",
|
|
22
|
+
},
|
|
23
|
+
dest: {
|
|
24
|
+
zh: "",
|
|
25
|
+
en: "",
|
|
26
|
+
},
|
|
27
|
+
co: "gmb",
|
|
28
|
+
});
|
|
29
|
+
}),
|
|
27
30
|
], []));
|
|
28
31
|
}
|
|
29
32
|
exports.default = fetchEtas;
|
package/dist/gmb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":";;AACA,mCAAmC;AASnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":";;AACA,mCAAmC;AASnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,MAAM,EAAE;oBACN,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;oBACzB,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;iBAC1B;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,KAAK;aACV,CAAC,CAAA;SAAA,CAAC;KACJ,EACD,EAAE,CACH,CACJ,CAAC;AACN,CAAC;AAxCD,4BAwCC"}
|
package/dist/hkkf.d.ts
ADDED
package/dist/hkkf.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("./utils");
|
|
4
|
+
function fetchEtas({ route, bound, seq }) {
|
|
5
|
+
if (seq === 0)
|
|
6
|
+
return Promise.resolve([]);
|
|
7
|
+
return fetch(`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`, {
|
|
8
|
+
cache: utils_1.isSafari ? "default" : "no-store",
|
|
9
|
+
})
|
|
10
|
+
.then((response) => response.json())
|
|
11
|
+
.then(({ data }) => {
|
|
12
|
+
if (!data)
|
|
13
|
+
return [];
|
|
14
|
+
return data
|
|
15
|
+
.map(({ ETA }) => {
|
|
16
|
+
return {
|
|
17
|
+
eta: ETA,
|
|
18
|
+
remark: {
|
|
19
|
+
zh: "",
|
|
20
|
+
en: "",
|
|
21
|
+
},
|
|
22
|
+
dest: {
|
|
23
|
+
zh: "",
|
|
24
|
+
en: "",
|
|
25
|
+
},
|
|
26
|
+
co: "hkkf",
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
exports.default = fetchEtas;
|
|
32
|
+
//# sourceMappingURL=hkkf.js.map
|
package/dist/hkkf.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAQnC,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,KAAK,EAAE,GAAG,EACF;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAClG;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,GAAG,EAAM,EAAE,EAAE;YAClB,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,MAAM;aACX,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AA9BD,4BA8BC"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,9 @@ const lrtfeeder_1 = __importDefault(require("./lrtfeeder"));
|
|
|
20
20
|
const gmb_1 = __importDefault(require("./gmb"));
|
|
21
21
|
const lightRail_1 = __importDefault(require("./lightRail"));
|
|
22
22
|
const mtr_1 = __importDefault(require("./mtr"));
|
|
23
|
+
const sunferry_1 = __importDefault(require("./sunferry"));
|
|
24
|
+
const fortuneferry_1 = __importDefault(require("./fortuneferry"));
|
|
25
|
+
const hkkf_1 = __importDefault(require("./hkkf"));
|
|
23
26
|
function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
|
|
24
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
28
|
try {
|
|
@@ -59,29 +62,16 @@ function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtf
|
|
|
59
62
|
bound: bound.mtr,
|
|
60
63
|
}));
|
|
61
64
|
}
|
|
62
|
-
else if (company_id === "
|
|
63
|
-
_etas = _etas.concat(yield (0,
|
|
64
|
-
|
|
65
|
-
gtfsId,
|
|
66
|
-
seq,
|
|
67
|
-
bound: bound.gmbHki,
|
|
65
|
+
else if (company_id === "fortuneferry" && stops.fortuneferry) {
|
|
66
|
+
_etas = _etas.concat(yield (0, fortuneferry_1.default)({
|
|
67
|
+
route, stops, seq, stopList
|
|
68
68
|
}));
|
|
69
69
|
}
|
|
70
|
-
else if (company_id === "
|
|
71
|
-
_etas = _etas.concat(yield (0,
|
|
72
|
-
stopId: stops.gmbKln[seq],
|
|
73
|
-
gtfsId,
|
|
74
|
-
seq,
|
|
75
|
-
bound: bound.gmbKln,
|
|
76
|
-
}));
|
|
70
|
+
else if (company_id === "sunferry" && stops.sunferry) {
|
|
71
|
+
_etas = _etas.concat(yield (0, sunferry_1.default)({ route, seq }));
|
|
77
72
|
}
|
|
78
|
-
else if (company_id === "
|
|
79
|
-
_etas = _etas.concat(yield (0,
|
|
80
|
-
stopId: stops.gmbNt[seq],
|
|
81
|
-
gtfsId,
|
|
82
|
-
seq,
|
|
83
|
-
bound: bound.gmbNt,
|
|
84
|
-
}));
|
|
73
|
+
else if (company_id === "hkkf" && stops.hkkf) {
|
|
74
|
+
_etas = _etas.concat(yield (0, hkkf_1.default)({ route, bound: bound.hkkf, seq }));
|
|
85
75
|
}
|
|
86
76
|
}
|
|
87
77
|
return _etas.sort((a, b) => {
|
|
@@ -101,18 +91,18 @@ function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtf
|
|
|
101
91
|
exports.fetchEtas = fetchEtas;
|
|
102
92
|
function fetchEtaDb() {
|
|
103
93
|
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
return fetch("https://data.hkbus.app/routeFareList.min.json")
|
|
94
|
+
return fetch("https://data.hkbus.app/routeFareList.min.json", { cache: "no-store" })
|
|
105
95
|
.then((r) => r.json())
|
|
106
|
-
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json")
|
|
96
|
+
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json", { cache: "no-store" })
|
|
107
97
|
.then(r => r.json()));
|
|
108
98
|
});
|
|
109
99
|
}
|
|
110
100
|
exports.fetchEtaDb = fetchEtaDb;
|
|
111
101
|
function fetchEtaDbMd5() {
|
|
112
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
-
return fetch("https://data.hkbus.app/routeFareList.md5")
|
|
103
|
+
return fetch("https://data.hkbus.app/routeFareList.md5", { cache: "no-store" })
|
|
114
104
|
.then((r) => r.text())
|
|
115
|
-
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5")
|
|
105
|
+
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5", { cache: "no-store" })
|
|
116
106
|
.then(r => r.text()));
|
|
117
107
|
});
|
|
118
108
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,gDAAwB;AACxB,gDAAwB;AACxB,4DAAoC;AACpC,gDAAwB;AACxB,4DAAoC;AACpC,gDAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sunferry.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("./utils");
|
|
4
|
+
function fetchEtas({ route, seq }) {
|
|
5
|
+
if (seq === 1)
|
|
6
|
+
return Promise.resolve([]);
|
|
7
|
+
return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
|
|
8
|
+
cache: utils_1.isSafari ? "default" : "no-store",
|
|
9
|
+
})
|
|
10
|
+
.then((response) => response.json())
|
|
11
|
+
.then(({ data }) => {
|
|
12
|
+
if (!data)
|
|
13
|
+
return [];
|
|
14
|
+
return data
|
|
15
|
+
.map(({ depart_time, rmk_en, rmk_tc, route_tc, route_en }) => {
|
|
16
|
+
const date = new Date();
|
|
17
|
+
let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
18
|
+
if ((new Date(guess)) < date) {
|
|
19
|
+
date.setDate(date.getDate() + 1);
|
|
20
|
+
guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
eta: guess,
|
|
24
|
+
remark: {
|
|
25
|
+
zh: rmk_tc,
|
|
26
|
+
en: rmk_en,
|
|
27
|
+
},
|
|
28
|
+
dest: {
|
|
29
|
+
zh: route_tc.split(" - ")[1],
|
|
30
|
+
en: route_en.split(" - ")[1],
|
|
31
|
+
},
|
|
32
|
+
co: "sunferry",
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.default = fetchEtas;
|
|
38
|
+
//# sourceMappingURL=sunferry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAOnC,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,GAAG,EACK;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,0CAA0C,KAAK,EAAE,EACjD;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAM,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;YACjG,IAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAG;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;aAC9F;YACD,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,MAAM;iBACX;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,EAAE,EAAE,UAAU;aACf,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AApCD,4BAoCC"}
|
package/dist/type.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "
|
|
1
|
+
export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "sunferry" | "hkkf" | "fortuneferry";
|
|
2
2
|
export type Terminal = {
|
|
3
3
|
en: string;
|
|
4
4
|
zh: string;
|
|
@@ -69,4 +69,6 @@ export type Eta = {
|
|
|
69
69
|
en: string;
|
|
70
70
|
};
|
|
71
71
|
co: Company;
|
|
72
|
+
lat?: number;
|
|
73
|
+
lng: number;
|
|
72
74
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Eta, StopList } from "./type";
|
|
2
|
+
interface fetchEtasProps {
|
|
3
|
+
route: string;
|
|
4
|
+
stops: {
|
|
5
|
+
fortuneferry: string[];
|
|
6
|
+
};
|
|
7
|
+
seq: number;
|
|
8
|
+
stopList: StopList;
|
|
9
|
+
}
|
|
10
|
+
export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }: fetchEtasProps): Promise<Eta[]>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { isSafari } from "./utils";
|
|
2
|
+
const getCode = (zhName) => {
|
|
3
|
+
if (zhName.includes("中環")) {
|
|
4
|
+
return "CL";
|
|
5
|
+
}
|
|
6
|
+
else if (zhName.includes("紅磡")) {
|
|
7
|
+
return "HH";
|
|
8
|
+
}
|
|
9
|
+
else if (zhName.includes("北角")) {
|
|
10
|
+
return "NP";
|
|
11
|
+
}
|
|
12
|
+
else if (zhName.includes("觀塘")) {
|
|
13
|
+
return "KT";
|
|
14
|
+
}
|
|
15
|
+
else if (zhName.includes("啟德")) {
|
|
16
|
+
return "KT";
|
|
17
|
+
}
|
|
18
|
+
else if (zhName.includes("屯門")) {
|
|
19
|
+
return "TM";
|
|
20
|
+
}
|
|
21
|
+
else if (zhName.includes("東涌")) {
|
|
22
|
+
return "TC";
|
|
23
|
+
}
|
|
24
|
+
else if (zhName.includes("沙螺灣")) {
|
|
25
|
+
return "SLW";
|
|
26
|
+
}
|
|
27
|
+
else if (zhName.includes("大澳")) {
|
|
28
|
+
return "TO";
|
|
29
|
+
}
|
|
30
|
+
return "CL";
|
|
31
|
+
};
|
|
32
|
+
export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }) {
|
|
33
|
+
if (stops.length === seq - 1)
|
|
34
|
+
return Promise.resolve([]);
|
|
35
|
+
const u = getCode(stopList[stops[seq]].name.zh);
|
|
36
|
+
const v = getCode(stopList[stops[seq + 1]].name.zh);
|
|
37
|
+
return fetch(`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`, {
|
|
38
|
+
cache: isSafari ? "default" : "no-store",
|
|
39
|
+
})
|
|
40
|
+
.then((response) => response.json())
|
|
41
|
+
.then(({ data }) => {
|
|
42
|
+
if (!data)
|
|
43
|
+
return [];
|
|
44
|
+
return data
|
|
45
|
+
.map(({ depart_time, rmk_tc, rmk_en }) => {
|
|
46
|
+
const date = new Date();
|
|
47
|
+
let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
48
|
+
if ((new Date(guess)) < date) {
|
|
49
|
+
date.setDate(date.getDate() + 1);
|
|
50
|
+
guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
eta: guess,
|
|
54
|
+
remark: {
|
|
55
|
+
zh: rmk_tc,
|
|
56
|
+
en: rmk_en,
|
|
57
|
+
},
|
|
58
|
+
dest: {
|
|
59
|
+
zh: "",
|
|
60
|
+
en: "",
|
|
61
|
+
},
|
|
62
|
+
co: "fortuneferry",
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=fortuneferry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"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"}
|
package/esm/gmb.js
CHANGED
|
@@ -10,18 +10,21 @@ export default function fetchEtas({ gtfsId, stopId, bound, seq, }) {
|
|
|
10
10
|
.filter(({ stop_seq }) => stop_seq === seq + 1)
|
|
11
11
|
.reduce((acc, { eta }) => [
|
|
12
12
|
...acc,
|
|
13
|
-
...eta.map((data) =>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
...eta.map((data) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
return ({
|
|
16
|
+
eta: data.timestamp,
|
|
17
|
+
remark: {
|
|
18
|
+
zh: (_a = data.remarks_tc) !== null && _a !== void 0 ? _a : "",
|
|
19
|
+
en: (_b = data.remarks_en) !== null && _b !== void 0 ? _b : "",
|
|
20
|
+
},
|
|
21
|
+
dest: {
|
|
22
|
+
zh: "",
|
|
23
|
+
en: "",
|
|
24
|
+
},
|
|
25
|
+
co: "gmb",
|
|
26
|
+
});
|
|
27
|
+
}),
|
|
25
28
|
], []));
|
|
26
29
|
}
|
|
27
30
|
//# sourceMappingURL=gmb.js.map
|
package/esm/gmb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,MAAM,EAAE;oBACN,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;oBACzB,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;iBAC1B;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,KAAK;aACV,CAAC,CAAA;SAAA,CAAC;KACJ,EACD,EAAE,CACH,CACJ,CAAC;AACN,CAAC"}
|
package/esm/hkkf.d.ts
ADDED
package/esm/hkkf.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isSafari } from "./utils";
|
|
2
|
+
export default function fetchEtas({ route, bound, seq }) {
|
|
3
|
+
if (seq === 0)
|
|
4
|
+
return Promise.resolve([]);
|
|
5
|
+
return fetch(`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`, {
|
|
6
|
+
cache: isSafari ? "default" : "no-store",
|
|
7
|
+
})
|
|
8
|
+
.then((response) => response.json())
|
|
9
|
+
.then(({ data }) => {
|
|
10
|
+
if (!data)
|
|
11
|
+
return [];
|
|
12
|
+
return data
|
|
13
|
+
.map(({ ETA }) => {
|
|
14
|
+
return {
|
|
15
|
+
eta: ETA,
|
|
16
|
+
remark: {
|
|
17
|
+
zh: "",
|
|
18
|
+
en: "",
|
|
19
|
+
},
|
|
20
|
+
dest: {
|
|
21
|
+
zh: "",
|
|
22
|
+
en: "",
|
|
23
|
+
},
|
|
24
|
+
co: "hkkf",
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=hkkf.js.map
|
package/esm/hkkf.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,KAAK,EAAE,GAAG,EACF;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAClG;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,GAAG,EAAM,EAAE,EAAE;YAClB,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,MAAM;aACX,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/esm/index.js
CHANGED
|
@@ -5,6 +5,9 @@ import lrtfeeder from "./lrtfeeder";
|
|
|
5
5
|
import gmb from "./gmb";
|
|
6
6
|
import lightrail from "./lightRail";
|
|
7
7
|
import mtr from "./mtr";
|
|
8
|
+
import sunferry from "./sunferry";
|
|
9
|
+
import fortuneferry from "./fortuneferry";
|
|
10
|
+
import hkkf from "./hkkf";
|
|
8
11
|
export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
|
|
9
12
|
try {
|
|
10
13
|
let _etas = [];
|
|
@@ -43,29 +46,16 @@ export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, c
|
|
|
43
46
|
bound: bound.mtr,
|
|
44
47
|
}));
|
|
45
48
|
}
|
|
46
|
-
else if (company_id === "
|
|
47
|
-
_etas = _etas.concat(await
|
|
48
|
-
|
|
49
|
-
gtfsId,
|
|
50
|
-
seq,
|
|
51
|
-
bound: bound.gmbHki,
|
|
49
|
+
else if (company_id === "fortuneferry" && stops.fortuneferry) {
|
|
50
|
+
_etas = _etas.concat(await fortuneferry({
|
|
51
|
+
route, stops, seq, stopList
|
|
52
52
|
}));
|
|
53
53
|
}
|
|
54
|
-
else if (company_id === "
|
|
55
|
-
_etas = _etas.concat(await
|
|
56
|
-
stopId: stops.gmbKln[seq],
|
|
57
|
-
gtfsId,
|
|
58
|
-
seq,
|
|
59
|
-
bound: bound.gmbKln,
|
|
60
|
-
}));
|
|
54
|
+
else if (company_id === "sunferry" && stops.sunferry) {
|
|
55
|
+
_etas = _etas.concat(await sunferry({ route, seq }));
|
|
61
56
|
}
|
|
62
|
-
else if (company_id === "
|
|
63
|
-
_etas = _etas.concat(await
|
|
64
|
-
stopId: stops.gmbNt[seq],
|
|
65
|
-
gtfsId,
|
|
66
|
-
seq,
|
|
67
|
-
bound: bound.gmbNt,
|
|
68
|
-
}));
|
|
57
|
+
else if (company_id === "hkkf" && stops.hkkf) {
|
|
58
|
+
_etas = _etas.concat(await hkkf({ route, bound: bound.hkkf, seq }));
|
|
69
59
|
}
|
|
70
60
|
}
|
|
71
61
|
return _etas.sort((a, b) => {
|
|
@@ -82,15 +72,15 @@ export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, c
|
|
|
82
72
|
}
|
|
83
73
|
}
|
|
84
74
|
export async function fetchEtaDb() {
|
|
85
|
-
return fetch("https://data.hkbus.app/routeFareList.min.json")
|
|
75
|
+
return fetch("https://data.hkbus.app/routeFareList.min.json", { cache: "no-store" })
|
|
86
76
|
.then((r) => r.json())
|
|
87
|
-
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json")
|
|
77
|
+
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json", { cache: "no-store" })
|
|
88
78
|
.then(r => r.json()));
|
|
89
79
|
}
|
|
90
80
|
export async function fetchEtaDbMd5() {
|
|
91
|
-
return fetch("https://data.hkbus.app/routeFareList.md5")
|
|
81
|
+
return fetch("https://data.hkbus.app/routeFareList.md5", { cache: "no-store" })
|
|
92
82
|
.then((r) => r.text())
|
|
93
|
-
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5")
|
|
83
|
+
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5", { cache: "no-store" })
|
|
94
84
|
.then(r => r.text()));
|
|
95
85
|
}
|
|
96
86
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,GAAG,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/esm/sunferry.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { isSafari } from "./utils";
|
|
2
|
+
export default function fetchEtas({ route, seq }) {
|
|
3
|
+
if (seq === 1)
|
|
4
|
+
return Promise.resolve([]);
|
|
5
|
+
return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
|
|
6
|
+
cache: isSafari ? "default" : "no-store",
|
|
7
|
+
})
|
|
8
|
+
.then((response) => response.json())
|
|
9
|
+
.then(({ data }) => {
|
|
10
|
+
if (!data)
|
|
11
|
+
return [];
|
|
12
|
+
return data
|
|
13
|
+
.map(({ depart_time, rmk_en, rmk_tc, route_tc, route_en }) => {
|
|
14
|
+
const date = new Date();
|
|
15
|
+
let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
16
|
+
if ((new Date(guess)) < date) {
|
|
17
|
+
date.setDate(date.getDate() + 1);
|
|
18
|
+
guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
eta: guess,
|
|
22
|
+
remark: {
|
|
23
|
+
zh: rmk_tc,
|
|
24
|
+
en: rmk_en,
|
|
25
|
+
},
|
|
26
|
+
dest: {
|
|
27
|
+
zh: route_tc.split(" - ")[1],
|
|
28
|
+
en: route_en.split(" - ")[1],
|
|
29
|
+
},
|
|
30
|
+
co: "sunferry",
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=sunferry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,GAAG,EACK;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,0CAA0C,KAAK,EAAE,EACjD;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAM,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;YACjG,IAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAG;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;aAC9F;YACD,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,MAAM;iBACX;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,EAAE,EAAE,UAAU;aACf,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/esm/type.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "
|
|
1
|
+
export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "sunferry" | "hkkf" | "fortuneferry";
|
|
2
2
|
export type Terminal = {
|
|
3
3
|
en: string;
|
|
4
4
|
zh: string;
|
|
@@ -69,4 +69,6 @@ export type Eta = {
|
|
|
69
69
|
en: string;
|
|
70
70
|
};
|
|
71
71
|
co: Company;
|
|
72
|
+
lat?: number;
|
|
73
|
+
lng: number;
|
|
72
74
|
};
|
package/package.json
CHANGED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Eta, RouteListEntry, StopList } from "./type";
|
|
2
|
+
import { isSafari } from "./utils";
|
|
3
|
+
|
|
4
|
+
interface fetchEtasProps {
|
|
5
|
+
route: string;
|
|
6
|
+
stops: {
|
|
7
|
+
fortuneferry: string[];
|
|
8
|
+
}
|
|
9
|
+
seq: number;
|
|
10
|
+
stopList: StopList;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const getCode = (zhName: string) => {
|
|
14
|
+
if ( zhName.includes("中環") ) {
|
|
15
|
+
return "CL"
|
|
16
|
+
} else if ( zhName.includes("紅磡") ) {
|
|
17
|
+
return "HH"
|
|
18
|
+
} else if ( zhName.includes("北角") ) {
|
|
19
|
+
return "NP"
|
|
20
|
+
} else if ( zhName.includes("觀塘") ) {
|
|
21
|
+
return "KT"
|
|
22
|
+
} else if ( zhName.includes("啟德") ) {
|
|
23
|
+
return "KT"
|
|
24
|
+
} else if ( zhName.includes("屯門") ) {
|
|
25
|
+
return "TM"
|
|
26
|
+
} else if ( zhName.includes("東涌") ) {
|
|
27
|
+
return "TC"
|
|
28
|
+
} else if ( zhName.includes("沙螺灣") ) {
|
|
29
|
+
return "SLW"
|
|
30
|
+
} else if ( zhName.includes("大澳") ) {
|
|
31
|
+
return "TO"
|
|
32
|
+
}
|
|
33
|
+
return "CL";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default function fetchEtas({
|
|
37
|
+
route, stops: { fortuneferry: stops }, seq, stopList
|
|
38
|
+
}: fetchEtasProps): Promise<Eta[]> {
|
|
39
|
+
if ( stops.length === seq - 1 ) return Promise.resolve([]);
|
|
40
|
+
const u = getCode(stopList[stops[seq]].name.zh)
|
|
41
|
+
const v = getCode(stopList[stops[seq+1]].name.zh)
|
|
42
|
+
|
|
43
|
+
return fetch(
|
|
44
|
+
`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`,
|
|
45
|
+
{
|
|
46
|
+
cache: isSafari ? "default" : "no-store",
|
|
47
|
+
},
|
|
48
|
+
)
|
|
49
|
+
.then((response) => response.json())
|
|
50
|
+
.then(({ data }) => {
|
|
51
|
+
if (!data) return [];
|
|
52
|
+
|
|
53
|
+
return data
|
|
54
|
+
.map(({ depart_time, rmk_tc, rmk_en }: any) => {
|
|
55
|
+
const date = new Date();
|
|
56
|
+
let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
|
|
57
|
+
if ( (new Date(guess)) < date ) {
|
|
58
|
+
date.setDate(date.getDate() + 1)
|
|
59
|
+
guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
eta: guess,
|
|
63
|
+
remark: {
|
|
64
|
+
zh: rmk_tc,
|
|
65
|
+
en: rmk_en,
|
|
66
|
+
},
|
|
67
|
+
dest: {
|
|
68
|
+
zh: "",
|
|
69
|
+
en: "",
|
|
70
|
+
},
|
|
71
|
+
co: "fortuneferry",
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
package/src/gmb.ts
CHANGED
package/src/hkkf.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Eta, RouteListEntry } from "./type";
|
|
2
|
+
import { isSafari } from "./utils";
|
|
3
|
+
|
|
4
|
+
interface fetchEtasProps {
|
|
5
|
+
route: string;
|
|
6
|
+
bound: RouteListEntry["bound"]["hkkf"];
|
|
7
|
+
seq: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default function fetchEtas({
|
|
11
|
+
route, bound, seq
|
|
12
|
+
}: fetchEtasProps): Promise<Eta[]> {
|
|
13
|
+
if ( seq === 0 ) return Promise.resolve([])
|
|
14
|
+
return fetch(
|
|
15
|
+
`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`,
|
|
16
|
+
{
|
|
17
|
+
cache: isSafari ? "default" : "no-store",
|
|
18
|
+
},
|
|
19
|
+
)
|
|
20
|
+
.then((response) => response.json())
|
|
21
|
+
.then(({ data }) => {
|
|
22
|
+
if (!data) return [];
|
|
23
|
+
|
|
24
|
+
return data
|
|
25
|
+
.map(({ETA}: any) => {
|
|
26
|
+
return {
|
|
27
|
+
eta: ETA,
|
|
28
|
+
remark: {
|
|
29
|
+
zh: "",
|
|
30
|
+
en: "",
|
|
31
|
+
},
|
|
32
|
+
dest: {
|
|
33
|
+
zh: "",
|
|
34
|
+
en: "",
|
|
35
|
+
},
|
|
36
|
+
co: "hkkf",
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -5,6 +5,9 @@ import lrtfeeder from "./lrtfeeder";
|
|
|
5
5
|
import gmb from "./gmb";
|
|
6
6
|
import lightrail from "./lightRail";
|
|
7
7
|
import mtr from "./mtr";
|
|
8
|
+
import sunferry from "./sunferry"
|
|
9
|
+
import fortuneferry from "./fortuneferry";
|
|
10
|
+
import hkkf from "./hkkf";
|
|
8
11
|
import { RouteListEntry, EtaDb, Eta, StopList } from "./type";
|
|
9
12
|
|
|
10
13
|
interface fetchEtasProps extends RouteListEntry {
|
|
@@ -68,33 +71,16 @@ export async function fetchEtas({
|
|
|
68
71
|
bound: bound.mtr,
|
|
69
72
|
}),
|
|
70
73
|
);
|
|
71
|
-
} else if (company_id === "
|
|
74
|
+
} else if (company_id === "fortuneferry" && stops.fortuneferry) {
|
|
72
75
|
_etas = _etas.concat(
|
|
73
|
-
await
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
_etas = _etas.concat(
|
|
82
|
-
await gmb({
|
|
83
|
-
stopId: stops.gmbKln[seq],
|
|
84
|
-
gtfsId,
|
|
85
|
-
seq,
|
|
86
|
-
bound: bound.gmbKln,
|
|
87
|
-
}),
|
|
88
|
-
);
|
|
89
|
-
} else if (company_id === "gmbNt" && stops.gmbNt) {
|
|
90
|
-
_etas = _etas.concat(
|
|
91
|
-
await gmb({
|
|
92
|
-
stopId: stops.gmbNt[seq],
|
|
93
|
-
gtfsId,
|
|
94
|
-
seq,
|
|
95
|
-
bound: bound.gmbNt,
|
|
96
|
-
}),
|
|
97
|
-
);
|
|
76
|
+
await fortuneferry({
|
|
77
|
+
route, stops, seq, stopList
|
|
78
|
+
})
|
|
79
|
+
)
|
|
80
|
+
} else if (company_id === "sunferry" && stops.sunferry) {
|
|
81
|
+
_etas = _etas.concat(await sunferry({route, seq}))
|
|
82
|
+
} else if (company_id === "hkkf" && stops.hkkf) {
|
|
83
|
+
_etas = _etas.concat(await hkkf({route, bound: bound.hkkf, seq}))
|
|
98
84
|
}
|
|
99
85
|
}
|
|
100
86
|
|
|
@@ -110,17 +96,17 @@ export async function fetchEtas({
|
|
|
110
96
|
}
|
|
111
97
|
|
|
112
98
|
export async function fetchEtaDb(): Promise<EtaDb> {
|
|
113
|
-
return fetch("https://data.hkbus.app/routeFareList.min.json")
|
|
99
|
+
return fetch("https://data.hkbus.app/routeFareList.min.json", {cache: "no-store"})
|
|
114
100
|
.then((r) => r.json())
|
|
115
|
-
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json")
|
|
101
|
+
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json", {cache: "no-store"})
|
|
116
102
|
.then(r => r.json())
|
|
117
103
|
);
|
|
118
104
|
}
|
|
119
105
|
|
|
120
106
|
export async function fetchEtaDbMd5(): Promise<string> {
|
|
121
|
-
return fetch("https://data.hkbus.app/routeFareList.md5")
|
|
107
|
+
return fetch("https://data.hkbus.app/routeFareList.md5", {cache: "no-store"})
|
|
122
108
|
.then((r) => r.text())
|
|
123
|
-
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5")
|
|
109
|
+
.catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5", {cache: "no-store"})
|
|
124
110
|
.then(r => r.text())
|
|
125
111
|
);
|
|
126
112
|
}
|
package/src/sunferry.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Eta } from "./type";
|
|
2
|
+
import { isSafari } from "./utils";
|
|
3
|
+
|
|
4
|
+
interface fetchEtasProps {
|
|
5
|
+
route: string;
|
|
6
|
+
seq: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default function fetchEtas({
|
|
10
|
+
route, seq
|
|
11
|
+
}: fetchEtasProps): Promise<Eta[]> {
|
|
12
|
+
if ( seq === 1 ) return Promise.resolve([])
|
|
13
|
+
return fetch(
|
|
14
|
+
`https://www.sunferry.com.hk/eta/?route=${route}`,
|
|
15
|
+
{
|
|
16
|
+
cache: isSafari ? "default" : "no-store",
|
|
17
|
+
},
|
|
18
|
+
)
|
|
19
|
+
.then((response) => response.json())
|
|
20
|
+
.then(({ data }) => {
|
|
21
|
+
if (!data) return [];
|
|
22
|
+
|
|
23
|
+
return data
|
|
24
|
+
.map(({depart_time, rmk_en, rmk_tc, route_tc, route_en}: any) => {
|
|
25
|
+
const date = new Date();
|
|
26
|
+
let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
|
|
27
|
+
if ( (new Date(guess)) < date ) {
|
|
28
|
+
date.setDate(date.getDate() + 1)
|
|
29
|
+
guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
eta: guess,
|
|
33
|
+
remark: {
|
|
34
|
+
zh: rmk_tc,
|
|
35
|
+
en: rmk_en,
|
|
36
|
+
},
|
|
37
|
+
dest: {
|
|
38
|
+
zh: route_tc.split(" - ")[1],
|
|
39
|
+
en: route_en.split(" - ")[1],
|
|
40
|
+
},
|
|
41
|
+
co: "sunferry",
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
package/src/type.ts
CHANGED
|
@@ -6,9 +6,9 @@ export type Company =
|
|
|
6
6
|
| "gmb"
|
|
7
7
|
| "lightRail"
|
|
8
8
|
| "mtr"
|
|
9
|
-
| "
|
|
10
|
-
| "
|
|
11
|
-
| "
|
|
9
|
+
| "sunferry"
|
|
10
|
+
| "hkkf"
|
|
11
|
+
| "fortuneferry";
|
|
12
12
|
|
|
13
13
|
export type Terminal = {
|
|
14
14
|
en: string;
|
|
@@ -85,4 +85,6 @@ export type Eta = {
|
|
|
85
85
|
en: string;
|
|
86
86
|
};
|
|
87
87
|
co: Company;
|
|
88
|
+
lat?: number;
|
|
89
|
+
lng: number;
|
|
88
90
|
};
|