From 5f1d9ae662956326a99b31de6c65a51a3f2469ac Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 10 Oct 2022 02:33:13 +0600 Subject: [PATCH] fix(route): wise (#11044) --- docs/en/other.md | 20 ++++----- docs/other.md | 20 ++++----- lib/router.js | 2 +- lib/routes/transferwise/pair.js | 64 -------------------------- lib/v2/wise/maintainer.js | 3 ++ lib/v2/wise/pair.js | 65 +++++++++++++++++++++++++++ lib/v2/wise/radar.js | 11 +++++ lib/v2/wise/router.js | 3 ++ lib/v2/wise/templates/description.art | 17 +++++++ 9 files changed, 120 insertions(+), 85 deletions(-) delete mode 100644 lib/routes/transferwise/pair.js create mode 100644 lib/v2/wise/maintainer.js create mode 100644 lib/v2/wise/pair.js create mode 100644 lib/v2/wise/radar.js create mode 100644 lib/v2/wise/router.js create mode 100644 lib/v2/wise/templates/description.art diff --git a/docs/en/other.md b/docs/en/other.md index 1b238ff733..6584204011 100644 --- a/docs/en/other.md +++ b/docs/en/other.md @@ -205,16 +205,6 @@ Official Website: -## TransferWise - -### FX Pair Yesterday - - - -Refer to [the list of supported currencies](https://transferwise.com/tools/exchange-rate-alerts/). - - - ## Trending Search Keyword Aggregator ### Aggregated Keyword Tracker @@ -257,6 +247,16 @@ Type +## Wise + +### FX Pair Yesterday + + + +Refer to [the list of supported currencies](https://wise.com/tools/exchange-rate-alerts/). + + + ## 裏垢女子まとめ ### Homepage diff --git a/docs/other.md b/docs/other.md index 01ac95f3aa..b468f32623 100644 --- a/docs/other.md +++ b/docs/other.md @@ -269,16 +269,6 @@ pageClass: routes -## TransferWise - -### 昨日汇率变动 - - - -参见支持的[货币列表](https://transferwise.com/tools/exchange-rate-alerts/)。 - - - ## TSSstatus(iOS 降级通道) ### Status @@ -328,6 +318,16 @@ type 为 all 时,category 参数不支持 cost 和 free +## Wise + +### 昨日汇率变动 + + + +参见支持的 [货币列表](https://wise.com/tools/exchange-rate-alerts/)。 + + + ## 艾瑞 ### 产业研究报告 diff --git a/lib/router.js b/lib/router.js index c018f1af04..b324b0e67a 100644 --- a/lib/router.js +++ b/lib/router.js @@ -2258,7 +2258,7 @@ router.get('/remote-work/:caty?', lazyloadRouteHandler('./routes/remote-work/ind router.get('/chinatimes/:caty', lazyloadRouteHandler('./routes/chinatimes/index')); // TransferWise -router.get('/transferwise/pair/:source/:target', lazyloadRouteHandler('./routes/transferwise/pair')); +// router.get('/transferwise/pair/:source/:target', lazyloadRouteHandler('./routes/transferwise/pair')); // chocolatey router.get('/chocolatey/software/:name?', lazyloadRouteHandler('./routes/chocolatey/software')); diff --git a/lib/routes/transferwise/pair.js b/lib/routes/transferwise/pair.js deleted file mode 100644 index c16d128c26..0000000000 --- a/lib/routes/transferwise/pair.js +++ /dev/null @@ -1,64 +0,0 @@ -const got = require('@/utils/got'); -const dayjs = require('dayjs'); -const customParseFormat = require('dayjs/plugin/customParseFormat'); - -module.exports = async (ctx) => { - dayjs.extend(customParseFormat); - let yesterday = dayjs().subtract(1, 'day'); - const dayBefore = yesterday.subtract(1, 'day').format('YYYY-MM-DD'); - - yesterday = yesterday.format('YYYY-MM-DD'); - - const guid = `${ctx.params.source}-${ctx.params.target}-${yesterday}`; - const cache = await ctx.cache.get(guid); - - const link = 'https://transferwise.com/tools/exchange-rate-alerts/'; - - if (cache) { - return Promise.resolve(JSON.parse(cache)); - } else { - const source = ctx.params.source.toUpperCase(); - const target = ctx.params.target.toUpperCase(); - const api = `https://api.transferwise.com/v1/rates?source=${source}&target=${target}&from=${dayBefore}&to=${dayjs().format('YYYY-MM-DDTHH:mm:ssZ')}&group=day`; - - const response = await got({ - method: 'get', - url: api, - headers: { - Referer: 'https://transferwise.com/tools/exchange-rate-alerts/', - authorization: 'Basic OGNhN2FlMjUtOTNjNS00MmFlLThhYjQtMzlkZTFlOTQzZDEwOjliN2UzNmZkLWRjYjgtNDEwZS1hYzc3LTQ5NGRmYmEyZGJjZA==', - 'Content-Type': 'application/json', - }, - }); - - const data = response.data; - - const yRate = data[1]; - const byRate = data[2]; - const trend = yRate.rate > byRate.rate; - const diff = (yRate.rate - byRate.rate) / yRate.rate; - - const percent = (Math.abs(diff) * 100).toFixed(4); - - const title = `${source}/${target} ${trend ? '📈' : '📉'} @${yRate.rate} ${diff > 0 ? '' : '-'}${percent}%`; - - const description = `

${source} to ${target}

DateRate
${yesterday}${yRate.rate}
${dayBefore}${byRate.rate}
`; - - const single = { - title, - description, - pubDate: new Date().toUTCString(), - guid, - link, - }; - - ctx.cache.set(guid, JSON.stringify(ctx.state.data)); - - ctx.state.data = { - title: `${source} to ${target} by TransferWise`, - link, - description: `Exchange Rate from TransferWise`, - item: [single], - }; - } -}; diff --git a/lib/v2/wise/maintainer.js b/lib/v2/wise/maintainer.js new file mode 100644 index 0000000000..0ac237e20d --- /dev/null +++ b/lib/v2/wise/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/pair/:source/:target': ['HenryQW'], +}; diff --git a/lib/v2/wise/pair.js b/lib/v2/wise/pair.js new file mode 100644 index 0000000000..5d2ea23def --- /dev/null +++ b/lib/v2/wise/pair.js @@ -0,0 +1,65 @@ +const got = require('@/utils/got'); +const { parseDate } = require('@/utils/parse-date'); +const dayjs = require('dayjs'); +const customParseFormat = require('dayjs/plugin/customParseFormat'); +dayjs.extend(customParseFormat); +const { art } = require('@/utils/render'); +const path = require('path'); +const renderDesc = (content) => art(path.join(__dirname, 'templates/description.art'), content); + +module.exports = async (ctx) => { + let yesterday = dayjs().subtract(1, 'day'); + const dayBefore = yesterday.subtract(1, 'day').format('YYYY-MM-DD'); + yesterday = yesterday.format('YYYY-MM-DD'); + + const source = ctx.params.source.toUpperCase(); + const target = ctx.params.target.toUpperCase(); + + const link = 'https://wise.com/tools/exchange-rate-alerts/'; + const guid = `wise:rates:${ctx.params.source}-${ctx.params.target}-${yesterday}`; + const single = await ctx.cache.tryGet(guid, async () => { + const { data } = await got('https://wise.com/rates/history', { + searchParams: { + source, + target, + length: 1, + unit: 'year', + resolution: 'daily', + }, + headers: { + referer: link, + }, + }); + + const yData = data[data.length - 1]; + const byDate = data[data.length - 2]; + const yRate = yData.value; + const byRate = byDate.value; + const trend = yRate > byRate; + const diff = (yRate - byRate) / yRate; + + const percent = (Math.abs(diff) * 100).toFixed(4); + + return { + title: `${source}/${target} ${trend ? '📈' : '📉'} @${yRate} ${diff > 0 ? '' : '-'}${percent}%`, + description: renderDesc({ + source, + target, + yesterday, + yRate, + dayBefore, + byRate, + }), + pubDate: parseDate(yData.time, 'x'), + guid, + link, + }; + }); + + ctx.state.data = { + title: `${source} to ${target} by Wise`, + link, + description: `Exchange Rate from Wise`, + item: [single], + }; +}; diff --git a/lib/v2/wise/radar.js b/lib/v2/wise/radar.js new file mode 100644 index 0000000000..8ba8486237 --- /dev/null +++ b/lib/v2/wise/radar.js @@ -0,0 +1,11 @@ +module.exports = { + 'wise.com': { + _name: 'Wise', + '.': [ + { + title: '昨日汇率变动', + docs: 'https://docs-rsshub.pages.dev/other.html#wise', + }, + ], + }, +}; diff --git a/lib/v2/wise/router.js b/lib/v2/wise/router.js new file mode 100644 index 0000000000..1ddcda8f8d --- /dev/null +++ b/lib/v2/wise/router.js @@ -0,0 +1,3 @@ +module.exports = (router) => { + router.get('/pair/:source/:target', require('./pair')); +}; diff --git a/lib/v2/wise/templates/description.art b/lib/v2/wise/templates/description.art new file mode 100644 index 0000000000..7a49bce5ff --- /dev/null +++ b/lib/v2/wise/templates/description.art @@ -0,0 +1,17 @@ +

{{ source }} to {{ target }}

+ + + + + + + + + + + + + + + +
DateRate
{{ yesterday }}{{ yRate }}
{{ dayBefore }}{{ byRate }}