61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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)
 | |
|   }
 | |
| }
 |