diff --git a/docs/en/README.md b/docs/en/README.md index 49beefd38..ac717b01b 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -312,6 +312,12 @@ GitHub provides some official RSS feeds: +## Parcel Tracking + +### Hermes + + + ## Uncategorized ### EZTV @@ -366,4 +372,4 @@ Provides a better reading experience (full text articles) over the official one. ### 99% Invisible - + diff --git a/router.js b/router.js index f846b036a..fc668799a 100644 --- a/router.js +++ b/router.js @@ -654,4 +654,7 @@ router.get('/laosiji/feed', require('./routes/laosiji/feed')); // 99% Invisible router.get('/99percentinvisible/transcript', require('./routes/99percentinvisible/transcript')); +// Hermes UK +router.get('/parcel/hermesuk/:tracking', require('./routes/parcel/hermesuk')); + module.exports = router; diff --git a/routes/parcel/hermesuk.js b/routes/parcel/hermesuk.js new file mode 100644 index 000000000..df54a3a25 --- /dev/null +++ b/routes/parcel/hermesuk.js @@ -0,0 +1,50 @@ +const axios = require('../../utils/axios'); +const dayjs = require('dayjs'); + +module.exports = async (ctx) => { + const tracking = ctx.params.tracking; + + let single; + + const cache = await ctx.cache.get(tracking); + if (cache) { + single = JSON.parse(cache); + } else { + const response = await axios({ + method: 'get', + url: `https://www.myhermes.co.uk/ajax/ref/trackParcelByBarcode?barcode=${tracking}`, + }); + + let parcel = response.data; + let message = ''; + + if (parcel.length > 0) { + parcel = parcel[0]; + + if (parcel.point) { + message += `${parcel.point.description}`; + } + + if (parcel.location) { + message += ` at ${parcel.location.description}`; + } + + if (parcel.estimatedDeliveryDate) { + message += ` ETA: ${dayjs(parcel.estimatedDeliveryDate).format('MMM DD')}`; + } + + single = { + pubDate: new Date(parcel.dateTime).toISOString(), + title: message, + }; + } + + await ctx.cache.set(tracking, JSON.stringify(single), 1 * 60 * 60); + } + + ctx.state.data = { + title: `Hermes Tracking ${tracking}`, + link: `https://www.myhermes.co.uk/tracking-results.html?trackingNumber=${tracking}`, + item: [single], + }; +};