Magento an Preissuchmaschine anbinden
Kürzlich war es meine Aufgabe, den Magento Shop eines Kunden an verschiedene Preissuchmaschinenanbieter wie Idealo, Billiger.de sowie Guenstiger.de anzubinden.
Die Anbieter benutzen alle sogenannte CSV Listen (Comma-separated values), um Produktdaten zu importieren, so dass das geplante Vorgehen folgendes beinhaltet:
a) Programmierung eines Scriptes, welches die gewünschten Produktdaten lädt und in eine CSV Datei schreibt
b) Nächtlicher Aufruf des Scriptes über einen Cronjob (automatische Ausführung durch den Server), so dass die Daten jeweils nachts auf den neuesten Stand gebracht werden.
Das Vorgehen zur Preissuchmaschinenanbindung
a) Das Script
Da mehrere, unterschiedliche CSV Listen erzeugt werden, habe ich mich dafür entschieden, die Erzeugung in eine eigene PHP Klasse auszulagern. So vermeidet man einerseits, den gleichen Code mehrmals zu schreiben oder zu duplizieren und hält sich die Möglichkeit offen, in Zukunft, einfach weitere CSV Dateien zu erzeugen.
Die Klasse iteriert über alle Produkte, die ihr übergeben werden und schreibt für jede ihr zugeordnete Preissuchmaschine einen Eintrag des Produktes in die jeweilige CSV Liste. Um das ordentlich zu lösen, wird für alle zu übermittelnde Felder wie beispielsweise dem Produktnamen, dem Preis, der Kategorie, der Lieferzeit, den Versandkosten, der Produktbeschreibung etc. ein Mapping angelegt, das definiert wie die entsprechende Spalte in der jeweiligen CSV Liste heißen soll (z.B. name, price, category, delv_time, shipping_cost, desc etc.).
Nachdem man die Klasse und die entsprechenden Daten der unterschiedlichen Preissuchmaschinen angelegt hat, müssen die Produkte natürlich auch an die Klasse übergeben werden. Sehen wir uns dazu einmal einen Code Ausschnitt an, wie ich dieses gelöst habe:
$storeId = 1; // Die ID des Shops aus dem wir die Produkte auslesen möchten
$products = Mage::getModel('catalog/product')->getCollection();
$products->addStoreFilter($storeId);
$products->addAttributeToFilter('status', 1); // Nur aktivierte Produkte
$products->addAttributeToFilter('visibility', 4); // Nur sichtbare
$products->addAttributeToSelect('*'); // Wir brauchen alle Attribute
$products->load();
Schließlich übergebe ich diese geladenen Produkte an die vorher erstellte Klasse und lasse sie die CSV Listen erzeugen:
$looper = new ProductCsvLooper();
$looper->setProducts($products);
$looper->loop();
b) Die Einbindung per Cronjob
Das gesamte Script ist gespeichert als „createCsvForPriceSearch.php“ im Magento Ordner, der angenommen im Pfad /var/www/htdocs/magento liegt.
Wenn man auf seinem Server in der Linux Konsole ist und als root User angemeldet ist, kann man nun einen neuen Cronjob per Befehl „crontab -e“ hinzufügen.
Hier fügt man die Zeile „0 3 * * * /usr/bin/php -f /var/www/htdocs/magento/createCsvForPriceSearch.php > /var/logs/loggingCsvPriceEngine.log 2>&1“ hinzu, so dass in Zukunft jeweils nachts um 3 Uhr die Listen erzeugt werden.