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

41 thoughts on “E-commerce: Google Shopping e osCommerce

  1. 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

  2. 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

  3. Luca

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

  4. pino

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

  5. User Sergio Gandrus Post author

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

  6. Roberto

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

  7. User Sergio Gandrus Post author

    @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

  8. 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

  9. User Sergio Gandrus Post author

    @Morgan

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

  10. 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.

  11. User Sergio Gandrus Post author

    @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 ‘)

  12. 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

  13. User Sergio Gandrus Post author

    @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

  14. 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

  15. 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?

  16. Simone

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

  17. 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’?

  18. 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.

  19. 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.

  20. User Sergio Gandrus Post author

    @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”

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">