API: Import vieler Artikel aus CSV

hi, ich bin gerade dabei einen Artikelimport zu bauen. Ich habe ~5k Artikel in einer CSV. Diese lese ich ein und arbeite sie in einer Schleife ab. Dabei greife dabei lokal auf die API zu und rufe dabei create bzw. update auf. Das Einlesen der CSV ist kein Problem. Das anlegen bzw. aktualisieren der Artikel an sich auch nicht. Bei kleinen Mengen läuft das wie geölt. das anlegen eines Artikels dauert im Durchschnitt 0.15 und das aktualisieren 0.05 Sekunden. Wenn ich mir das aber auf ~5k Artikel hochrechne, ist das entschieden zu lang. Wie importiert ihr eure Artikel regelmäßig? Wie ist hier die best practice? Vielen Dank,

Durch unsere Erfahrung mit Shopconnect und der Wawi Anbindung zu Shopware haben wir seit kurzem ein kleines Programm für Kunden die keine Wawi haben, oder aber deren WaWi keine Schnittstelle zu Shopware hat oder die einfach nur XLS, CSV Tabellen haben und diese mit dem Shop abgleichen wollen, um genau dieses abzudecken sonstiges-f58/artikeltabellensynchronisierer-fur-shopware-shoplukas-t13414.html?hilit=shoplukas#p62164 Demoversion kann installiert werden und mit 300 Datensätzen ausprobiert werden. Bisher waren alle begeistert die es nutzen. Gerne erweitern wir das Programm auch noch um Dinge die nicht enthalten sind (dürften aber sicherlich ganz ganz wenige sein ;-))

Danke, ich benötige aber ein Programm, dass auf dem Server läuft und via Cronjob aufgerufen werden kann. Sonst noch jemand?

Ich lasse mir gerade sowas programmieren. Habe derzeit 20.000 Artikel die täglich geupdatet werden müssen. Bin mal gespannt wie es danach läuft.

[quote=“csaeum”]Ich lasse mir gerade sowas programmieren. Habe derzeit 20.000 Artikel die täglich geupdatet werden müssen. Bin mal gespannt wie es danach läuft.[/quote] hi, ich habe mir jetzt auch etwas programmiert. Die Performance lässt aber noch etwas zu wünschen übrig, zumal ich noch keinen Bilderimport dabei habe. Ich habe die Vermutung, dass es über die API einfach zu lahm ist. Ich glaube ich teste das noch mal mit direkten inserts in die Datenbank. Kannst ja mal berichten wenn dein Script läuft. viele Grüße,

Ich habe Artikeldaten in einer PostgreSQL Datenbank. Diese können als “Online-Shop” Artikel markiert werden. Die Software, die ich für den Abgleich verwende, kann nun “Batch”-mässig alle Artikel aus der DB lesen und per REST API nach Shopware schicken, der umgekehrte Weg geht auch. Soweit banal (bis auf das Problem, dass ich Artikel nicht suchen kann, habe das in einem separaten Thema beschrieben…). Und nun kommts: Die Software kann im Hintergrund als Unix Prozess mitlaufen und nutzt dann ein PostgreSQL-Feature, asynchrone Benachrichtigung. Ein INSERT, UPDATE, oder DELETE auf der entsprechenden Tabelle löst eine Benachrichtigung aus, die Software empfängt diese, liest den entsprechenden Datensatz aus der DB und sendet dei Daten an Shopware. Dabei spielt es absolut keine Rolle, mit welcher Software der Datensatz geändert wurde, denn es ist ja die DB selbst, welche die Benachrichtung schickt. Die Anwendungen sind via DB völlig entkoppelt. So bekomme ich den Abgleich mehr oder weniger in Echtzeit hin und muss nicht täglich alle Artikel schicken. Das macht die Sache doch wesentlich schneller.

hi, mbalmer. soetwas gibt es auch für MySQL und nennt sich dann trigger. das nützt mir leider nichts, weil die aktuellen Daten immer täglich, komplett als csv zur Verfügung gestellt werden. Die könnte ich jetzt in einer Tabelle speichern die einen insert bzw. update triggert. Da aber immer alle Artikel aktualisiert werden, macht es das ganze auch nicht schneller. Die Überlegung wäre jetzt die Daten aus der CSV nur in die DB zu schrieben wenn sie unterschiedlich sind. Dazu müsste ich die Daten aus der DB aber erst abfragen und ob das performanter ist? Aber danke für den Hinweis. ich werde das mal über eine Tabelle testen.

Das besondere ist ja nicht der Trigger (den verwende ich auch in PostgreSQL), sondern, dass der Trigger eine asynchrone Benachrichtung auslöst. Und diese Mechanismus kennt MySQL meines Wissens nach nicht (SQL Befehle „LISTEN“, „NOTIFY“, „UNLISTEN“). D.h. der eine Client macht ein „LISTEN foobar“ und wenn ein anderer Client ein „NOTIFY foobar“ absetzt, werden alle Clients, die vorher ein „LISTEN foobar“ abgesetzt haben, benachrichtigt. Quasi das „Observer“ Design Pattern, aber mit einer Datenbank realisiert :wink:

ok, das kennt MySql in der tat nicht. ich habe es jetzt so umgesetzt, dass ich die Daten vom CSV in eine Tabelle schreiben. Diese triggert on UPDATE bzw. on INSERT und füllt damit eine 2. Tabelle. diese Tabelle frage ich via PHP ab und habe damit dann nur die geänderten Daten. Mit diesen mache ich dann ein Update/Create via Shopware API. Da sich ja selten alle Daten ändern, geht das so schon mal um einiges fixer. Vielen Dank für den Hinweis Trigger zu nutzen :wink:

Mal ne andere Frage: Die neuen Artikel gehen dann lokale API oder REST API in das Shopware System? Ich habe nämlich das Problem, dass Artikel, die ich per REST API einpflege, nachher im Storefront nicht suchen kann. Findet einfach nix ;( (Artikel sind aber da, sehe ich im Backend) - Marc

lokale API, REST habe ich noch nicht getestet. Gruß, H.

Nabend, ich will hier ja keine große Werbung machen, aber es gibt endlich ein Plugin, das bei MULTIDIMENSIONALEN VARIANTENARTIKELN mitspielt. Heute rausgekommen. Man kann den „configuratortype“ importieren UND AUCH die Bilder den EINZELNEN VARIANTEN zuordnen. Da ich das hier im Forum immmer gesucht habe, wollte ich dies alle Leidensgenossen wissen lassen. Das Plugin heißt: Universal Importer/Exporter von Antony Systemhaus. Der Import klappt hervorragend, habe ihn auch mit >1000 Artikeln getestet, Beim Export gibt es sicherlich noch ein wenig Potential nach oben, aber Herr Lubisch ist da extrem engagiert. Schönes Wochenende Robert

Lol Du willst keine Werbung machen aber kopierst deinen Text in fünf Posts? Das macht man eigentlich aber dann nicht. Zudem wären mehr Infos und der Link schon gewesen So macht es wenig Sinn! Zudem hat Shopware, soweit ich das sehen kann, alle diese Funktion in 4.2 eingebaut. Also in die Rest API, wo auch der Fokus lag! Schön und einfacher ist sicher ein Plugin, aber das kann man auch anders bekanntgeben Das meine paar Worte dazu

Ja, ich gebe dir Recht, dass ich das nicht überall hätte posten müssen, aber das waren nun einmal die Beiträge, in denen meiner Meinung nach Gleichgesinnte waren. Ich habe wirklich lange Zeit damit verbracht, eine Lösung für mich zu finden und weiß, dass einige wirklich das gleiche Problem hatten. Nicht jeder kann sich seine API stricken und ich konnte es auch nicht. Daher ist dieses Plugin für mich sehr hilfreich und ich wollte, dass es jeder mitbekommt, der ebenfalls auf der Suche war - ich hatte also wirklich keine böse Absicht. Den Namen und den Hersteller des Plugin habe ich ja genannt. Interessierte sollte somit in der Lage sein, das Plugin zu finden. Gerne kann ich Fragen zu dem Plugin beantworten. Für mich funktioniert es super. Grüße und schönen Sonntag noch