This repository has been archived on 2024-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
FunctionProject/api/assets/functions/main/rightPrice.js
2020-08-03 14:14:45 +02:00

61 lines
1.8 KiB
JavaScript

const { randomNumber } = require('./randomNumber')
const errorHandling = require('../../utils/errorHandling')
const { serverError } = require('../../config/errors')
const { SCRAPER_API_KEY } = require('../../config/config')
const axios = require('axios')
const { JSDOM } = require('jsdom')
const subjectList = [
'smartphone',
'pc+gamer',
'pc+portable',
'TV',
'casque',
'clavier',
'souris',
'ecran',
'jeux+vidéos'
]
function getRandomArrayElement (array) {
return array[randomNumber(0, array.length - 1)]
}
async function getAmazonProductList (subject) {
const url = `https://www.amazon.fr/s?k=${subject}`
const { data } = await axios.get(
`http://api.scraperapi.com/?api_key=${SCRAPER_API_KEY}&url=${url}`
)
const { document } = new JSDOM(data).window
const amazonProductList = document.querySelectorAll('.s-result-item')
const productsList = []
for (const indexProduct in amazonProductList) {
try {
const elementProduct = amazonProductList[indexProduct]
const productImage = elementProduct.querySelector('.s-image')
const originalPrice = elementProduct.querySelector('.a-price-whole')
.innerHTML
productsList.push({
name: productImage.alt,
image: productImage.src,
price: Number(originalPrice.replace(',', '.').replace(' ', ''))
})
} catch (_error) {
continue
}
}
return productsList
}
module.exports = async ({ res, next }, _argsObject) => {
const subject = getRandomArrayElement(subjectList)
try {
const productsList = await getAmazonProductList(subject)
const randomProduct = getRandomArrayElement(productsList)
return res.status(200).json({ subject, ...randomProduct })
} catch (error) {
console.error(error)
return errorHandling(next, serverError)
}
}