FunctionProject/api/assets/functions/main/rightPrice.js

57 lines
2.0 KiB
JavaScript
Raw Normal View History

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");
2020-04-27 22:06:37 +02:00
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)];
}
2020-05-13 00:08:51 +02:00
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 (let 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;
2020-04-27 22:06:37 +02:00
}
module.exports = rightPriceOutput = 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);
}
2020-04-27 22:06:37 +02:00
}