CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • Bons plans
  • RetourHigh-Tech
    • Actus JVTECH
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [Javascript] Aide projet

News événement
Jouez et tentez de remporter des places de cinéma ainsi que des goodies du film Kraven The Hunter
DébutPage précedente
1
Page suivantePage suivante
BaelishlaChance BaelishlaChance
MP
Niveau 4
13 mai 2024 à 16:23:51

Salut les kheys,

Je suis ce tuto pour faire un web scraper amazon. J'en suis rendu à la moitié mais je suis bloqué depuis plus d'une semaine à cause de Mongoose. En effet, aucun des produits scrapé n'est ajouté à la collection de la database, et ce malgré que le scraping soit réussi.

À noter que dans le terminal malgré la réussite du scraping j'ai tout de même un retour d'erreur que je ne réussi pas à faire partir (peut-être que le problème est là?)

Bref j'ai vraiment besoin d'aide :/ je compte sur vous

Mon code :

"use server"

import Product from "../models/product.model";
import { connectTodb } from "../mongoose";
import { scrapeAmazonProduct } from "../scraper";
import { getAveragePrice, getHighestPrice, getLowestPrice } from "../util";
import { revalidatePath } from "next/cache";

export async function scrapeAndStoreProduct(productURL: string) {
  if (!productURL) return;

  try {
    connectTodb();
    const scrapedProduct: any = await scrapeAmazonProduct(productURL);
    
    if (!scrapedProduct) {
      console.log("Failed to scrape product");
      return; // Stop execution if product scraping failed
    }
    let product = scrapedProduct;

    // Check if scrapedProduct is an object and has a url property
    if (typeof scrapedProduct === 'object' && scrapedProduct !== null && 'url' in scrapedProduct) {
      const existingProduct = await Product.findOne({ url: scrapedProduct.url });
      if (existingProduct) {
        const updatedPriceHistory : any = [
          ...existingProduct.priceHistory,
          { price: scrapedProduct.currentPrice }
        ]
        product = {
          ...scrapedProduct,
          priceHistory: updatedPriceHistory,
          lowestPrice: getLowestPrice(updatedPriceHistory),
          highestPrice: getHighestPrice(updatedPriceHistory),
          averagePrice: getAveragePrice(updatedPriceHistory)

        }
      }
    }
    const newProduct = await Product.findOneAndUpdate(
      {url: scrapedProduct.url},
      product,
      {upsert: true, new:true}
      );
    revalidatePath(`/products/${newProduct._id}`);
  } catch (error: any) {
    throw new Error(`Failed to create/update product: ${error.message}`)
  }
}


export async function getProductById(productId: string){
  try {
    connectTodb();
  } catch (error) {
    
  }
}
import mongoose from "mongoose";
import { connectTodb } from "../mongoose";


const productSchema = new mongoose.Schema({
  url: {type : String, required:true, unique:true},
  currency: {type: String, required:true},
  image: {type: String, required:true},
  title: {type: String, required:true},
  currentPrice: {type: Number, required:true},
  originalPrice: {type: Number, required:true},
  priceHistory: [
    {
      prices: {type: Number, required: true},
      date: {type:Date, default: Date.now}
    },
  ],
  lowestPrice: {type: Number},
  highestPrice: {type: Number},
  averagePrice: {type: Number},
  discountRate: {type: Number},
  description: {type: String},
  isOutOfStock: {type: Boolean, default: false},
  users: [{email: {type: String, required: true}}],
}, {timestamps: true});

const Product = mongoose.models.Product || mongoose.model('Product', productSchema);

export default Product;
import mongoose from "mongoose";


let isConnected = false;

export const connectTodb = async () => {
  mongoose.set('strictQuery', true);
  // Vérifie si MONGODB_URI est défini
  if (!process.env.MONGODB_URI) {
    console.error('MONGODB_URI is not defined');
    return;
  }

  if(isConnected) return console.log('=> using existing database connection');
  
  try {
    await mongoose.connect(process.env.MONGODB_URI);
    isConnected = true;
    console.log('MONGODB Connected');
  } catch (error) {
    console.error('Failed to connect to MongoDB:', error);
  }
};
BaelishlaChance BaelishlaChance
MP
Niveau 4
13 mai 2024 à 16:32:43

Oublié le lien vers le tuto :

https://youtu.be/lh9XVGv6BHs?si=vzjglW85f7kttOjQ&t=6512

LGV LGV
MP
Niveau 24
13 mai 2024 à 16:39:59

Bonjour,

dans le terminal [...] j'ai tout de même un retour d'erreur que je ne réussi pas à faire partir (peut-être que le problème est là?)

mais poste tout, le code et le tuto, sauf les-dites erreurs...

ce serait utile de partager le retour console, car c'est surement le plus gros indice pour savoir ce qui ne marche pas.

BaelishlaChance BaelishlaChance
MP
Niveau 4
13 mai 2024 à 16:45:16

Le 13 mai 2024 à 16:39:59 :
Bonjour,

dans le terminal [...] j'ai tout de même un retour d'erreur que je ne réussi pas à faire partir (peut-être que le problème est là?)

mais poste tout, le code et le tuto, sauf les-dites erreurs...

ce serait utile de partager le retour console, car c'est surement le plus gros indice pour savoir ce qui ne marche pas.

Bien sûr tu as raison, voici le retour console :

 Compiled / in 3s (864 modules)
Warning: Each child in a list should have a unique "key" prop.

Check the top-level render call using <div>. See https://reactjs.org/link/warning-keys for more information.
    at div
 GET / 200 in 3305ms
 Compiled in 250ms (303 modules)
MONGODB Connected
{
  url: 'https://www.amazon.fr/Acer-Nitro-KG241YS3biipf-BluelightShield-Inclinable/dp/B0C28QPGR2/ref=pd_ci_mcx_mh_mcx_views_0?pd_rd_w=6Um3V&content-id=amzn1.sym.599bf194-df9f-4215-9a04-668b64035e9b%3Aamzn1.symc.45dc5f4c-d617-4dba-aa26-2cadef3da899&pf_rd_p=599bf194-df9f-4215-9a04-668b64035e9b&pf_rd_r=GZT3RR107R9VMD4YD53C&pd_rd_wg=xXitn&pd_rd_r=faaf1dc0-3548-448f-a812-ecb8c374ca29&pd_rd_i=B0C28QPGR2',
  currency: '€',
  image: 'https://m.media-amazon.com/images/I/71GazIpwJ+L._AC_SX355_.jpg',
  title: 'Acer Nitro KG241YS3biipf - Écran PC Gaming 24" Full HD, 180Hz (1920x1080, 16:9, FreeSync, 1ms VRB, 250 Nits, Comfyview, BluelightShield, 2xHDMI 2.0/1xDP 1.2) Moniteur PC Inclinable, Couleur Noir',
  currentPrice: 139139,
  originalPrice: 1449014490429609,
  priceHistory: [],
  discountRate: NaN,
  outOfStock: false,
  description: ''Ecran pc amazon",
  lowestPrice: 139139,
  highestPrice: 139139,
  averagePrice: 139139,
  reviewsCount: 3
}
Failed to scrape product
 POST / 200 in 3188ms
BaelishlaChance BaelishlaChance
MP
Niveau 4
14 mai 2024 à 10:20:31

up !

bouboulefou8 bouboulefou8
MP
Niveau 2
14 mai 2024 à 17:11:11

tu dois avoir un problème entre comment ta table est structurée et les données que tu envoie

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment