X

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
Sergio Gandrus: Da febbraio 2024 lavoro come CTO presso Deva Connection Il mio stack è PHP/MySQL/Git/Docker. Lavoro con Agile (Scrum) e utilizzo principalmente AWS come cloud provider. Sono papà e marito. Nel tempo libero mi piace leggere, il buon vino e viaggiare.

View Comments (41)

  • 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

  • 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

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

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

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

  • @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.

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

  • @Roberto

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