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

Magento Preissuchmaschine Anbindung - Günstiger.de, Idealo, Billiger.deNachdem 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.

Veröffentlicht am: 9. Januar 2013Kategorien: Magento Shop EntwicklungTags: , ,

Gemeinsam
können wir
Großes
bewegen.

Philip Günther

Philip Günther

Geschäftsführer

Aktuelle Blog Beiträge

Über den Autor / die Autorin: M.Paepper

Marc Päpper ist Leiter der Entwicklung bei Lemundo und offiziell zertifizierter Magento Entwickler. Je komplexer die Herausforderungen an die Programmierung, desto größer leuchten seine Augen. Sie haben ein anspruchsvolles Projekt – fordern Sie ihn heraus und Sie bekommen das bestmögliche Ergebnis. Sein Wissensdurst führte ihn über ein Informatik-Studium in Hamburg zur Uni nach Berkeley in Kalifornien sowie ein Masterstudium Neuro-Cognitive Psychology in München. Neben den herkömmlichen Programmiersprachen spricht er auch fließend Englisch und Französisch. IT-untypisch wird die Freizeit entweder Outdoor oder mit einem gutem Buch verbracht.