E-commerce: Google Shopping e osCommerce

grey E commerce: Google Shopping e osCommerce

E’ da inizio mese che Google Shopping ha fatto il suo ingresso anche in Italia.
Utilizzando il motorone di Mountain View sarà possibile navigare e cercare tra i prodotti di proprio interesse, pubblicati dai vari merchant.
Una grande e scomoda concorrenza per tutti quei portali che offrono servizi di comparazione prezzi.
Ecco alcuni link utili per approfondire:

Inviare l’elenco dei prodotti presenti nel proprio e-commerce non è difficile, basta estrarre tutti i record e seguire alcune linee guida.

Un mio cliente che aveva una versione vecchia ma personalizzata di osCommerce desiderava essere presente in Google Shopping.
Ci sono alcuni plugin che permettono di interfacciarsi con Google Shopping ma li ho trovati macchinosi e, spesso, difficili da configurare.
Ho scelto, così, come metodo di invio dei dati, la pubblicazione del datafeed sotto forma di file di testo scritto da uno script PHP.

Nota bene che c’è un set di dati obbligatori da estrarre dal db e inserire nel datafeed (vedi qui) e altri che sono consigliati.
AGGIORNAMENTO: Il valore MPN è diventato praticamente obbligatorio

Lo condivido sperando che possa essere utile a qualcun altro.

<?php
// connessione
$dbhost = ‘tuohost';
$dbuser = ‘tuouser';
$dbpass = ‘tuapass';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (‘Error connecting to mysql’);

$dbname = ‘nometuodb';
mysql_select_db($dbname);

$query = ”
select p.products_id,
pd.products_name,
pd.products_description,
manufacturers.manufacturers_name as mfgName,
manufacturers.manufacturers_id,
p.products_price,
p.products_image,
p.products_weight,
p.products_quantity
from products p
left join products_description pd on p.products_id = pd.products_id
left join manufacturers on manufacturers.manufacturers_id = p.manufacturers_id
where p.products_status = ‘1’ and p.products_quantity > ‘0’ order by p.products_id”;

// nome del file txt. Il nome può essere uno qualsiasi
$datafile=”miodominio-googlebase.txt”;

// lancio la query
$products_query = mysql_query($query);

// apro il file per scriverci
$file = fopen($datafile, “w”);

// scrivo le intestazioni dei dati che voglio inviare.
// Il separatore predefinito che ho scelto è il tab
$file_header = “id\tcondizione\tlink\ttitolo\tmarca\tdescrizione\tprezzo\tpeso spedizione\tlink_immagine\tquantit&agrave;\tmpn\n”;
fwrite($file, $file_header);

// ciclo attraverso i risultati per scrivere il datafeed
while ($products = mysql_fetch_array($products_query)) {

// i maggiori problemi sono dati dai caratteri della descrizione del prodotto
// la “pulizia” avviene in due passaggi
$descr_clean = preg_replace(“/^[^a-z0-9]?(.*?)[^a-z0-9]?$/i”, “$1″, strip_tags($products['products_description']));

$_strip_search = array(
“![\t ]+$|^[\t ]+!m”, // rimuove spazi avanti e dietro che possono essere confusi con i tab
‘%[\r\n]+%m’); // rimuove a capo
$_strip_replace = array(
”,
‘ ‘);
$_cleaner_array = array(“>” => “> “, “&reg;” => “”, “®” => “”, “&trade;” => “”, “™” => “”, “\t” => “”, ”    ” => “”); //rimuove caratteri speciali

$descr_clean = preg_replace($_strip_search, $_strip_replace, strip_tags(strtr($products['products_description'], $_cleaner_array)));

// cerco se esiste l’immagine del prodotto altrimenti metto il no_image.png (questo file può variare da installazione a installazione di osCommerce)
if(!file_exists(“images/”.$products['products_image'])) {
$image = “http://www.miodominio.com/images/no_image.png”;
} else {
$image = “http://www.miodominio.com/images/”.$products['products_image'];
}

$price = number_format($products['products_price'], 2, ‘.’, ”); //formattazione euro

$prod_line = $products['products_id'].”\tnuovo\thttp://www.miodominio.com/product_info.php?products_id=”.$products['products_id'].”\t”.$products['products_name'].”\t”.$products['mfgName'].”\t”.substr($descr_clean, “0”, “400”).”\t”.$price.”\t”.$products['products_weight'].”\t”.$image.”\t”.$products['products_quantity'].”\t”.$products['products_id'].”\n”;

$line_to_write = htmlentities($prod_line);

fwrite($file, $line_to_write);
}

fclose($file);
?>

Lanciando questo script che io ho chiamato datafeedgoogle.php si crea un file di testo (miodominio-googlebase.txt) che poi deve essere segnalato nel pannello merchant di Google.
Ovviamente si può settare un cron job sul server in modo che ogni sera venga lanciato lo script per la creazione del file txt.
In questo modo, nello stesso pannello di configurazione del merchant, potremo segnalare che l’aggiornamento dei prodotti avviene giornalmente.

Link: Google Shopping

Scarica il file dell’esempio

Google Shopping
Google Merchant Center
la guida al Google Merchant Center
il blog di Google Merchant Center center
il punto di partenza per
226549 7235709930 4007 n E commerce: Google Shopping e osCommerce

Sergio Gandrus

sono consulente informatico di Napoli, freelance dal 2005.
Programmo in ambiente LAMP e lavoro quotidianamente con WordPress, Joomla!, vBulletin e osCommerce.
Realizzo app mobile con PhoneGap/Cordova.
Sono papà e marito. Nel (poco) tempo libero mi piace leggere, il buon vino e viaggiare.
226549 7235709930 4007 n E commerce: Google Shopping e osCommerce
  • http://www.stefanosinesi.it Stefano

    Grazie mille per lo script^^ molto utile, ciao

  • pino

    Salve,sto provato il tuo script e google mi segnala che la qualità dei dati son validi ma mi da anche un Codice di risposta non valido errore 404 puoi aiutarmi.Grazie

  • http://www.sergiogandrus.it Sergio Gandrus

    @pino

    dov’è che ti segnala l’errore? E riferito a cosa?

  • pino

    Ciao,mi sono dimenticato che ho implementato il tuo scipt sulla root di un sito e-commerce(Oscommerce) e l’errore che ricevo è nel Riepilogo stato del feed:
    Il server remoto ha restituito un codice di risposta non valido.
    Esempi:
    URL Codice di risposta 404
    http://www.xxxx.it/googlebase

  • http://www.sergiogandrus.it Sergio Gandrus

    @pino
    il codice si riferisce a qualcosa di non trovato.
    L’url sottostante non si riferisce ad un file txt…

  • Luca

    Ciao, una curiosità il tuo cliente ha poi visto pubblicati i suoi prodotti. I miei sono in attesa da oltre 15 giorni. Grazie

  • pino

    Ciao,no,ho ancora dei problemi,probabilmente l’oscommerce del cliente è un osCommerce Merchant ed è un pò diverso

  • http://www.sergiogandrus.it Sergio Gandrus

    @Luca
    nel pannello merchant bisogna vedere se ci sono dei warning.
    Ultimamente Google aveva cambiato nomi a dei campi e non mi pubblicava i prodotti.
    Da quando è tutto ok devono passare 7 giorni.
    Tra poco aggiorno il post.

  • Roberto

    ciao,
    ho provato il tuo script ma ottengo una pagina bianca senza alcun errore… dove sbaglio?
    grazie

  • http://www.sergiogandrus.it Sergio Gandrus

    @Roberto

    nessun errore. L’output è solo la creazione del file. A video non compare niente.

  • Roberto

    e dove crea il file .txt

  • http://www.sergiogandrus.it Sergio Gandrus

    @Roberto

    dove si trova lo script

  • Roberto

    e quindi non me lo crea… se chiamo l’url del file txt mi dice che non esiste…

  • http://www.sergiogandrus.it Sergio Gandrus

    @Roberto

    non so com’è la configurazione del tuo server.
    Prova a creare un file con quel nome sul server e dagli permessi di lettura e scrittura (777) e vedi se funge

  • http://www.ecommerce-webmarketing.it/ Morgan

    Ciao Sergio,
    Approfitto della tua cortesia e competenza per chiederti un’ info in merito al tuo post, io utilizzo “prestashop” come piattaforma, la stringa di codice in php che hai creato secondo te potrebbe funzionare lo stesso o le righe di comando sono specifiche e create ad hoc per osCommerce… (immagino di si, ma per scrupolo te lo chiedo, in quanto ho provato a cercare qualche cosa di simile per Prestashop ma invano al momento).
    Ti ringrazio a priori per un eventuale riscontro, buona giornata.
    Morgan

  • http://www.sergiogandrus.it Sergio Gandrus

    @Morgan

    no, lo script è scritto per una vecchia versione di osCommerce.
    Seguendo le linee guida non dovrebbe essere complicato “costruire” qualcosa di simile

  • http://www.cg-tech.eu Giovanna

    Considerato che ci capisco pochissimo di queste cose, potresti darmi una mano mandandomi il tuo file php compilato ? grazie.

  • http://www.cg-tech.eu Giovanna

    ho caricato il file… ci sono riuscita ora come si fa ad eseguirlo ?

    Grazie.

    Scusa le numerose richieste

  • http://www.sergiogandrus.it Sergio Gandrus

    @Giovanna

    semplicemente lo richiami all’interno del browser oppure fai un cron job sul server che lo avvia quotidianamente

  • http://www.cg-tech.eu Giovanna

    Prima di tutto grazie per la risposta, ma il cron job come si fa ?

  • http://www.cg-tech.eu Giovanna

    mi da questo errore :

    Parse error: syntax error, unexpected T_DNUMBER in /web/htdocs/www.cg-tech.eu/home/datafeedgoogle.php on line 3

    cosa potrebbe essere ?

    Grazie.

  • http://www.sergiogandrus.it Sergio Gandrus

    @Giovanna
    il cron job va settato sul server, chiedi al tuo provider/amministratore.

    L’errore potrebbe derivare dal copia/incolla. Sostituisci tutti gli accenti inclinati con quelli normali (ad es. ‘ con ‘)

  • http://www.cg-tech.eu Giovanna

    posso mandarti il file e gli dai una occhiata gli accenti sembrano corretti

    Grazie.

  • Simone

    Ciao Sergio
    Molto utile il tuo script grazie :-)
    ho un problemino non mi accetta lo User Id perchè è utilizza una @

    Parse error: syntax error, unexpected ‘@’ in /web/htdocs/www.xxxxx.it/home/googlefeed.php on line 4

  • http://www.sergiogandrus.it Sergio Gandrus

    @Giovanna

    mandamelo a infoCHIOCCIOLAsergiogandrus.it

  • http://www.sergiogandrus.it Sergio Gandrus

    @Simone

    e come fa la connessione al db il tuo osCommerce?

  • Simone

    inserisco i segueni parametri
    dbhost http://ftp.nomesito.it
    dbuser accesso mysql o accesso a ftp (login di aruba) ?
    le ho provate tutte ma mi da sempre errore di sintassi righa 7
    Grazie

  • http://www.quellochetimanca.it Simone

    Parse error: syntax error, unexpected T_STRING in /web/htdocs/www.quellochetimanca.it/home/googlefeed.php on line 7

  • http://www.sergiogandrus.it Sergio Gandrus

    @Simone

    come dbhost devi inserire l’IP assegnato al tuo mysql (spesso è localhost).
    come dbuser l’utente col quale ti connetti al database
    come dbpass la password utilizzata per autenticarti

  • http://www.cg-tech.eu Giovanna

    Prima di tutto un grazie sincero per la collaborazione ma purtroppo da lo stesso errore.

    Non è che sbaglio directory, dove lo devo caricare ?

    GRAZIE

  • Simone

    Molte gentile grazie ma purtroppo nessun miglioramento:
    Parse error: syntax error, unexpected T_STRING in /web/htdocs/www.miosito.it/home/googlefeed.php on line 7
    Parametri settati correttamente …. su che server l’hai testato linux o windows?

  • http://www.sergiogandrus.it Sergio Gandrus

    @Simone

    su linux. Secondo me hai avuto anche tu un problema con il copia/incolla. Scarica il file di esempio.

  • http://www.quellochetimanca.it Simone

    Grazie Sergio ora è tutto ok era proprio solo un problema di copia incolla se hai paypal ti giro volentieri qualcosa per il disturbo

  • http://www.sergiogandrus.it Sergio Gandrus

    @Simone

    grazie. sergio.gandrus@gmail.com

  • Olga

    Ciao! Grazie per lo script! Ho un oscommerce e funziona il tutto oltre che nel fle txt vengono inseriti soltanto 3 articoli. Non riesco a capire perche’?

  • http://www.sergiogandrus.it Sergio Gandrus

    @Olga

    dipende scuramente dalla query

  • http://www.organizzaufficio.com Claudio

    Ciao Sergio, ho inserito il file nell’ftp, ma da questo errore:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/htdocs/www.organizzaufficio.com/home/datafeedg.php on line 36
    Il file txt: scrive l’intestazione, ma bloccandosi non scrive i prodotti. Gentilmente dove è l’errore? Grazie sei il migliore.

  • http://www.sergiogandrus.it Sergio Gandrus

    @Claudio

    controlla i nomi dei campi. Devono corrispondere a quelli del tuo db.
    Un consiglio: non rendere pubblico l’url dello script ;)

  • http://www.organizzaufficio.com Claudio

    Grazie Sergio, ho controllato i nomi dei campi e sono perfettamente uguali, la query “products” ha un prenome con l’underscore sul DB, “claudio_products”, ho provato alla riga 36 a mettere “mysql_fetch_array($claudio_products))”, ma non funziona, se puoi spiegami, se è complicato allora mi arrenderò, grazie di nuovo sei gentilissimo.

  • http://www.organizzaufficio.com Claudio

    scusa, precisazione: “mysql_fetch_array($claudio_products_query))”

  • http://www.sergiogandrus.it Sergio Gandrus

    @Claudio

    la variabile che definisce la query è scritta lì ed è “$query”.
    Forse tu ti riferisci ai nomi dei campi o a qello della tabella.
    In quel caso devi modificare la query.
    Ad esempio se la tabella prodotti si chiama claudio_products
    cambia la riga “from products p”
    in “from claudio_products p”