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 (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; } 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); } }