🐛 FIX: Changement de logique pour rightPrice
This commit is contained in:
parent
008f518f96
commit
02078ecc7a
@ -30,7 +30,7 @@ Le projet est disponible sur [function.divlo.fr](https://function.divlo.fr/) (ac
|
|||||||
|
|
||||||
Le partage est essentiel afin de progresser, l'**Open Source** permet l'entraide et le **partage de connaissance** entre développeurs.
|
Le partage est essentiel afin de progresser, l'**Open Source** permet l'entraide et le **partage de connaissance** entre développeurs.
|
||||||
|
|
||||||
Si vous voulez **contribuer**, avant toute chose écrivait une **"[issue](https://github.com/Divlo/FunctionProject/issues)" sur GitHub** à propos des changements que vous voulez apporter et on pourra en **discuter avec grand plaisir**. 😉
|
Si vous voulez **contribuer**, avant toute chose écrivez une **"[issue](https://github.com/Divlo/FunctionProject/issues)" sur GitHub** à propos des changements que vous voulez apporter et on pourra en **discuter avec grand plaisir**. 😉
|
||||||
|
|
||||||
## 🌐 Installation
|
## 🌐 Installation
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
HOST = "http://localhost:8080"
|
HOST = "http://localhost:8080"
|
||||||
FRONT_END_HOST = "http://localhost:3000"
|
FRONT_END_HOST = "http://localhost:3000"
|
||||||
OpenWeatherMap_API_KEY = ""
|
OpenWeatherMap_API_KEY = ""
|
||||||
|
Scraper_API_KEY = ""
|
||||||
DB_HOST = ""
|
DB_HOST = ""
|
||||||
DB_NAME = ""
|
DB_NAME = ""
|
||||||
DB_USER = ""
|
DB_USER = ""
|
||||||
|
@ -3,6 +3,7 @@ const config = {
|
|||||||
HOST: process.env.HOST,
|
HOST: process.env.HOST,
|
||||||
FRONT_END_HOST: process.env.FRONT_END_HOST,
|
FRONT_END_HOST: process.env.FRONT_END_HOST,
|
||||||
WEATHER_API_KEY: process.env.OpenWeatherMap_API_KEY,
|
WEATHER_API_KEY: process.env.OpenWeatherMap_API_KEY,
|
||||||
|
SCRAPER_API_KEY: process.env.Scraper_API_KEY,
|
||||||
DATABASE: {
|
DATABASE: {
|
||||||
host: process.env.DB_HOST,
|
host: process.env.DB_HOST,
|
||||||
name: process.env.DB_NAME,
|
name: process.env.DB_NAME,
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
const { randomNumber } = require('./randomNumber');
|
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 = [
|
const subjectList = [
|
||||||
"smartphone",
|
"smartphone",
|
||||||
@ -17,35 +22,36 @@ function getRandomArrayElement(array) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function getAmazonProductList(subject) {
|
async function getAmazonProductList(subject) {
|
||||||
const url = `https://www.amazon.fr/s?k=${subject}`;
|
const url = `https://www.amazon.fr/s?k=${subject}`;
|
||||||
const Nightmare = require('nightmare')();
|
const { data } = await axios.get(`http://api.scraperapi.com/?api_key=${SCRAPER_API_KEY}&url=${url}`);
|
||||||
return await Nightmare.goto(url)
|
const { document } = (new JSDOM(data)).window;
|
||||||
.wait('.s-result-item')
|
const amazonProductList = document.querySelectorAll('.s-result-item');
|
||||||
.evaluate(() => {
|
const productsList = [];
|
||||||
const amazonProductList = document.querySelectorAll('.s-result-item');
|
for (let indexProduct in amazonProductList) {
|
||||||
const productsList = [];
|
try {
|
||||||
for (let indexProduct in amazonProductList) {
|
const elementProduct = amazonProductList[indexProduct];
|
||||||
try {
|
const productImage = elementProduct.querySelector('.s-image');
|
||||||
const elementProduct = amazonProductList[indexProduct];
|
const originalPrice = elementProduct.querySelector(".a-price-whole").innerHTML;
|
||||||
const productImage = elementProduct.querySelector('.s-image');
|
productsList.push({
|
||||||
const originalPrice = elementProduct.querySelector(".a-price-whole").innerHTML;
|
name: productImage["alt"],
|
||||||
productsList.push({
|
image: productImage["src"],
|
||||||
name: productImage["alt"],
|
price: Number(originalPrice.replace(",", ".").replace(" ", ""))
|
||||||
image: productImage["src"],
|
});
|
||||||
price: Number(originalPrice.replace(",", ".").replace(" ", ""))
|
} catch (_error) {
|
||||||
});
|
continue;
|
||||||
} catch (_error) {
|
}
|
||||||
continue;
|
}
|
||||||
}
|
return productsList;
|
||||||
}
|
|
||||||
return productsList;
|
|
||||||
})
|
|
||||||
.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = rightPriceOutput = async ({ res }, _argsObject) => {
|
module.exports = rightPriceOutput = async ({ res, next }, _argsObject) => {
|
||||||
const subject = getRandomArrayElement(subjectList);
|
const subject = getRandomArrayElement(subjectList);
|
||||||
const productsList = await getAmazonProductList(subject);
|
try {
|
||||||
const randomProduct = getRandomArrayElement(productsList);
|
const productsList = await getAmazonProductList(subject);
|
||||||
return res.status(200).json({ subject, ...randomProduct });
|
const randomProduct = getRandomArrayElement(productsList);
|
||||||
|
return res.status(200).json({ subject, ...randomProduct });
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return errorHandling(next, serverError);
|
||||||
|
}
|
||||||
}
|
}
|
1338
api/package-lock.json
generated
1338
api/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -19,6 +19,7 @@
|
|||||||
"express-http-to-https": "^1.1.4",
|
"express-http-to-https": "^1.1.4",
|
||||||
"express-validator": "^6.4.0",
|
"express-validator": "^6.4.0",
|
||||||
"helmet": "^3.21.3",
|
"helmet": "^3.21.3",
|
||||||
|
"jsdom": "^16.2.2",
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"ms": "^2.1.2",
|
"ms": "^2.1.2",
|
||||||
@ -32,7 +33,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"morgan": "^1.9.1",
|
"morgan": "^1.9.1",
|
||||||
"nightmare": "^3.0.2",
|
|
||||||
"nodemon": "^2.0.2"
|
"nodemon": "^2.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user