-
Notifications
You must be signed in to change notification settings - Fork 0
/
declarations.js
96 lines (90 loc) · 2.5 KB
/
declarations.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// 'ts-check'
/**
* @typedef {Object} Currency
* @property {string} currency
* @property {number} exchange
*/
/**
* @typedef {Object} CurrencyIdentification
* @property {string} dolar
* @property {string} euro
* @property {string} lira
* @property {string} rublo
* @property {string} yuan
*/
/**
* @typedef {import '@supabase/supabase-js'.SupabaseClient} SupabaseClient
*/
/**
* @typedef {Object} insertData
* @property {SupabaseClient} db
* @property {Currency | Currency[]} data
*/
const playwright = require('playwright-aws-lambda')
// const sdk = require('aws-sdk')
const identifications = require('./currencies.json')
// Create a single supabase client for interacting with your database as service_role
/**
* función asíncrona para insertar los datos en la base de datos
* @param {insertData} object
* @returns {Promise<PostgrestResponse>} for testing
*/
const insert = async ({ db, data }) => {
return await db
.from('currency_bolivar')
.insert(data)
.then(res => {
console.log('Currencies inserted', JSON.stringify({ data: res.data }, null, 2))
return res
})
}
/**
* Obtenemos los datos de la página web del banco central de venezuela
* @param {string} url dirección del banco central de venezuela
* @returns {Promise<Currency[]>}
*/
const scraper = async (url) => {
const browser = await playwright.launchChromium()
const context = await browser.newContext()
const page = await context.newPage()
await page.goto(url)
let dolar = await page.$('div#dolar strong')
dolar = await dolar.textContent()
let euro = await page.$('div#euro strong')
euro = await euro.textContent()
let rublo = await page.$('div#rublo strong')
rublo = await rublo.textContent()
let lira = await page.$('div#lira strong')
lira = await lira.textContent()
let yuan = await page.$('div#yuan strong')
yuan = await yuan.textContent()
await browser.close()
return {
dolar,
euro,
lira,
rublo,
yuan
}
}
/**
* Función asíncrona para mapear la información obtenida del banco central de venezuela
* @param {string[]} currencies
* @returns {Currency[]}
*/
const mapper = currencies => {
// currency, exchange
const data = []
for (const currency in currencies) {
if (Object.hasOwnProperty.call(currencies, currency)) {
const exchange = Number(currencies[currency].trim().replace(',', '.'))
data.push({ currency: identifications[currency], exchange })
}
}
return data
}
module.exports = {
insert,
scraper,
mapper
}