- Learn
- WooCommerce REST API: sincronizzazione con NodeJS e MongoDB
- Prodotti di WooCommerce: importazione delle immagini
Prodotti di WooCommerce: importazione delle immagini
In questo capitolo vedremo come perfezionare l’importazione dei prodotti di WooCommerce importando anche l’immagine principale di ciascun prodotto.
Creiamo la directory /public/images/products/
dove salveremo le immagini. Quindi installiamo il modulo request:
npm install request --save
Ora creiamo una funzione di utility che accetta come parametro un prodotto delle REST API ed effettua il download dell’immagine principale restituendo il nuovo URL dell’immagine o null
in caso di errore:
'use strict';
const request = require('request');
const fs = require('fs');
const path = require('path');
const ABSPATH = path.dirname(process.mainModule.filename);
const UPLOAD_DIR = ABSPATH + '/public/images/products/';
module.exports = {
importProductImage: (product) => {
let featuredImageSrc = product.featured_src;
let imageName = featuredImageSrc.substring(featuredImageSrc.lastIndexOf('/') + 1);
let imageSrc = '/public/images/products/' + imageName;
try {
request(featuredImageSrc).pipe(fs.createWriteStream(UPLOAD_DIR + imageName));
return imageSrc;
} catch(e) {
return null;
}
}
};
Abbiamo definito come costante il path assoluto alla cartella delle immagini dei prodotti per poi usarlo nel download dell’immagine in evidenza. Il download avviene reindirizzando il risultato ottenuto dalla richiesta GET allo stream di scrittura di Node che salva fisicamente l’immagine usando il nome originale preso dall’URL dell’immagine originale.
A questo punto aggiungiamo la funzione di utility alla funzione di middleware dell’App:
const productUtils = require('./lib/products-utils');
app.use( (req, res, next ) => {
req.API = API;
req.crypto = crypto;
req.db = new db();
req.utils = productUtils;
next();
});
Ora dobbiamo solo modificare la nostra route di importazione:
importProducts: async (req, res) => {
try {
let data = await req.API.products();
let products = data.products;
req.db.connect().then(client => {
let db = client.db('wc');
let prods = db.collection('products');
products.forEach(product => {
let id = product.id;
prods.count({id: id}, (err, num) => {
if(!err) {
if( num === 0 ) {
let importedImage = req.utils.importProductImage(product);
if(importedImage !== null) {
product.featured_src = importedImage;
}
prods.insert(product);
}
}
});
});
res.redirect('/dashboard/import/?imported=1');
});
} catch(err) {
res.redirect('/dashboard/import');
}
}
Se l’importazione dell’immagine ha avuto successo, sostituiamo l’URL dell’immagine originale con il nuovo URL ottenuto dalla funzione di importazione.
Se vuoi aggiornamenti su e-commerce, WordPress inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Typescript, Angular e Bootstrap assieme per applicazioni real world
La recente affermazione in ambito web delle applicazioni rich basate su HTML5 e Javascript è diventato sorgente di una serie […]