diff --git a/api/nlb/busArrivalTime.js b/api/nlb/busArrivalTime.js index cb84e06..b32c137 100644 --- a/api/nlb/busArrivalTime.js +++ b/api/nlb/busArrivalTime.js @@ -3,23 +3,27 @@ const { getNlbRootUrl } = require("../../helper/helper"); const rootUrl = getNlbRootUrl(); -module.exports.getBusArrivalTimeNlb = async (routeId, stopId) => { - let result = null; +module.exports.getBusArrivalTimeNlb = async ( + busRouteId, + busStopId, + language +) => { + let busArrivalTime = null; try { const queryParams = new URLSearchParams({ action: "estimatedArrivals", - routeId, - stopId, - language: "zh", + routeId: busRouteId, + stopId: busStopId, + language: language || "zh", }); const response = await fetch(`${rootUrl}/stop.php?${queryParams}`); if (response) { - result = await response.json(); + busArrivalTime = await response.json(); } } catch (e) { console.log("error = ", e); } - return result; + return busArrivalTime; }; diff --git a/api/nlb/busRouteStop.js b/api/nlb/busRouteStop.js new file mode 100644 index 0000000..821eeb2 --- /dev/null +++ b/api/nlb/busRouteStop.js @@ -0,0 +1,23 @@ +const fetch = require("node-fetch"); +const { getNlbRootUrl } = require("../../helper/helper"); + +const rootUrl = getNlbRootUrl(); + +module.exports.getBusRouteStopByBusRouteIdNlb = async (busRouteId) => { + let busRouteStop = null; + + try { + const queryParams = new URLSearchParams({ + action: "list", + routeId: busRouteId, + }); + const response = await fetch(`${rootUrl}/stop.php?${queryParams}`); + if (response) { + busRouteStop = await response.json(); + } + } catch (e) { + console.log("error = ", e); + } + + return busRouteStop; +}; diff --git a/api/nlb/busStopArrivalTime.js b/api/nlb/busStopArrivalTime.js new file mode 100644 index 0000000..209b007 --- /dev/null +++ b/api/nlb/busStopArrivalTime.js @@ -0,0 +1,30 @@ +const fetch = require("node-fetch"); +const _ = require("lodash"); +const { getNwfbOrCtbRootUrl } = require("../../helper/helper"); + +const rootUrl = getNwfbOrCtbRootUrl(); + +module.exports.getBusStopArrivalTimeNlb = async (stopId, language) => { + let result = null; + + try { + const queryParams = new URLSearchParams({ + lang: language || "zh-hant", + }); + const response = await fetch( + `${rootUrl}/v1/transport/batch/stop-eta/NLB/${stopId}?${queryParams}` + ); + if (response) { + result = await response.json(); + } + } catch (e) { + console.log("error = ", e); + } + + let finalResultList = []; + if (result && result.data) { + finalResultList = _.groupBy(result.data, "route"); + } + + return finalResultList; +}; diff --git a/serverless.yml b/serverless.yml index ac4ce33..3f1fab9 100644 --- a/serverless.yml +++ b/serverless.yml @@ -236,6 +236,14 @@ functions: method: get cors: true + nlbBusRouteStop: + handler: src/nlb/busRouteStop/handler.busRouteStop + events: + - http: + path: /nlb/bus-route-stop + method: get + cors: true + nlbBusArrivalTime: handler: src/nlb/busArrivalTime/handler.busArrivalTime events: @@ -244,5 +252,13 @@ functions: method: get cors: true + nlbBusStopArrivalTime: + handler: src/nlb/busStopArrivalTime/handler.busStopArrivalTime + events: + - http: + path: /nlb/bus-stop-arrival-time + method: get + cors: true + plugins: - serverless-offline diff --git a/src/nlb/busArrivalTime/handler.js b/src/nlb/busArrivalTime/handler.js index 198d4c6..9e37ff5 100644 --- a/src/nlb/busArrivalTime/handler.js +++ b/src/nlb/busArrivalTime/handler.js @@ -7,22 +7,23 @@ module.exports.busArrivalTime = async (event) => { let response = {}; if (event.queryStringParameters) { - const { routeId, stopId } = event.queryStringParameters; - if (routeId && stopId) { - const getBusArrivalTimeNlbResult = await getBusArrivalTimeNlb( - routeId, - stopId + const { busRouteId, busStopId, language } = event.queryStringParameters; + if (busRouteId && busStopId && language) { + const getBusArrivalTimeResult = await getBusArrivalTimeNlb( + busRouteId, + busStopId, + language ); let busArrivalTimeNlb = []; - if (getBusArrivalTimeNlbResult) { - busArrivalTimeNlb = getBusArrivalTimeNlbResult.estimatedArrivals; + if (getBusArrivalTimeResult) { + busArrivalTimeNlb = getBusArrivalTimeResult.estimatedArrivals; } response = { statusCode: 200, body: JSON.stringify({ - message: "busArrivalTimeNlb", + message: "getBusArrivalTime", busArrivalTimeNlb, }), }; @@ -30,7 +31,8 @@ module.exports.busArrivalTime = async (event) => { response = { statusCode: 400, body: JSON.stringify({ - message: "busArrivalTimeNlb error, no routeId and stopId", + message: + "getBusArrivalTime error, no busRouteId and busStopId and language", }), }; } diff --git a/src/nlb/busRouteStop/handler.js b/src/nlb/busRouteStop/handler.js new file mode 100644 index 0000000..14507fa --- /dev/null +++ b/src/nlb/busRouteStop/handler.js @@ -0,0 +1,43 @@ +const { + getBusRouteStopByBusRouteIdNlb, +} = require("../../../api/nlb/busRouteStop"); + +module.exports.busRouteStop = async (event) => { + console.log("### busRouteStop ###"); + console.log("event.queryStringParameters = ", event.queryStringParameters); + + let response = {}; + + if (event.queryStringParameters) { + const { busRouteId } = event.queryStringParameters; + if (busRouteId) { + const getBusRouteStopResult = await getBusRouteStopByBusRouteIdNlb( + busRouteId + ); + + let busRouteStopNlb = []; + if (getBusRouteStopResult) { + busRouteStopNlb = getBusRouteStopResult.stops; + } + + response = { + statusCode: 200, + body: JSON.stringify({ + message: "getBusRouteStop", + busRouteStopNlb, + }), + }; + } else { + response = { + statusCode: 400, + body: JSON.stringify({ + message: "getBusRouteStop error, no busRouteId", + }), + }; + } + } + + console.log("response = ", response); + + return response; +}; diff --git a/src/nlb/busStopArrivalTime/handler.js b/src/nlb/busStopArrivalTime/handler.js new file mode 100644 index 0000000..898de21 --- /dev/null +++ b/src/nlb/busStopArrivalTime/handler.js @@ -0,0 +1,44 @@ +const { + getBusStopArrivalTimeNlb, +} = require("../../../api/nlb/busStopArrivalTime"); + +module.exports.busStopArrivalTime = async (event) => { + console.log("### busStopArrivalTime ###"); + console.log("event.queryStringParameters = ", event.queryStringParameters); + + let response = {}; + + if (event.queryStringParameters) { + const { stopId, language } = event.queryStringParameters; + if (stopId && language) { + const getBusStopArrivalTimeNlbResult = await getBusStopArrivalTimeNlb( + stopId, + language + ); + + let busStopArrivalTimeNlb = []; + if (getBusStopArrivalTimeNlbResult) { + busStopArrivalTimeNlb = getBusStopArrivalTimeNlbResult; + } + + response = { + statusCode: 200, + body: JSON.stringify({ + message: "busStopArrivalTimeNlb", + busStopArrivalTimeNlb, + }), + }; + } else { + response = { + statusCode: 400, + body: JSON.stringify({ + message: "busStopArrivalTimeNlb error, no stopId and language", + }), + }; + } + } + + console.log("response = ", response); + + return response; +};