1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import axios from 'axios'
- import { Client as NotionClient } from '@notionhq/client'
- const RATE_URL = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'
- const RATE_REGEXP = /<Cube currency=\'([A-Z]{3})\' rate=\'(\d+\.\d+)\'\/>/g
- export default {
- returnFailed(code, message) {
- process.stdout.write(JSON.stringify({
- complete: 1,
- code: code,
- description: message
- }) + "\n")
- },
- returnSuccess() {
- process.stdout.write(JSON.stringify({
- complete: 1,
- code: 0
- }) + "\n")
- },
- async fetchExchangeRateData(baseCurrency) {
- if (baseCurrency === null) {
- baseCurrency = 'CNY'
- }
- const result = { EUR: 1.0 }
- const resp = await axios.get(RATE_URL)
- const matches = [...resp.data.matchAll(RATE_REGEXP)]
- let baseRate = .0
- matches.forEach(item => {
- if (baseCurrency === item[1]) {
- baseRate = parseFloat(item[2])
- }
- result[item[1]] = parseFloat(item[2])
- })
- for (let key in result) {
- result[key] = baseRate / result[key]
- }
- return result
- },
- async updateRate(NOTION_KEY, DATABASE_ID, rateMap) {
- const notion = new NotionClient({auth: NOTION_KEY})
- const database = await notion.databases.query({database_id: DATABASE_ID})
- for (const page of database.results) {
- let currency = page.properties['Currency']['title'][0]['plain_text']
- if (!currency in rateMap) {
- continue;
- }
- await notion.pages.update({
- page_id: page.id,
- properties: {
- Rate: {
- number: rateMap[currency]
- }
- }
- })
- }
- }
- }
|