Artikelupload per API mit Bildern?

Hallo zusammen,

wir importieren Artikel per API mit Bilder in den Shop. Das funktioniert soweit.
Werden die Artikelbilder mit jedem Upload wieder kopiert bzw. hochgeladen? Auch wenn es das identische Bild ist?

Muss ich da für jeden Artikel vor dem Upload prüfen ob das Bild bereits angelegt wurde?

Grüße
sunflower

Die API erstellt jedes mal die Bilder neu. Du solltest am besten schauen das du sie nicht doppelt höchlädst

Bedeutet das auch, dass dann das gleiche Bild mehrfach im Shopware-Verzeichnis gespeichert wird?

Wie “schaut” man denn da am Besten vorher?  Wink

Ich prüfe vor dem Import ob der Artikel existiert, da ja in put und post unterschieden werden muss. Kann da evtl im Array Image der path verglichen werden?

Unsere CSV-Datei aus der Wawi hat immer alle Daten, also auch die Bilder, im Datensatz. Auch wenn sich nur ein Wert des Artikels geändert hat.

Wie sieht es denn mit dem merge mode aus?

Da müssten doch mit override die Bilder überschrieben werden und somit nicht zwei Neue angelegt werden.

 

Stand vor einem ähnlichen Problem. Mein Ticket dazu ist schon knapp nen Jahr offen. Habs jetzt vorläufig über ne API Endpoint-Erweiterung der Article Resource gelöst, die die urls rausschmeisst wenn Datei zu Bild schon vorhanden. Sauberes überschreiben der alten Bilder, was eigentlich die neue “Medien Ersetzen” Funktion erledigen sollte hab ich aber auch noch nicht gemacht.

https://developers.shopware.com/developers-guide/rest-api/extend-api-resource/

 

 

Wie sieht es denn mit dem merge mode aus?

Probier mal __options_images => replace. Soweit ich mich erinnern konnte überschreibt der zwar die Bilder, aber irgendwas war da was nicht gepasst hat. Ich glaub der Dateiname wird dabei auch geändert oder so deswegen haben ich damals den Endpoint gemacht

Danke für die Info. Das muss ich mir mal ansehen.

Mit dem „Media Garbadge Collector“ kann man überflüssige Bilder, also mehrfach upgeloaded und nicht verknüpft,entfernen. Doch die Wirkung zu beseitigen und nicht die Ursache ist nicht zufriedenstellend. Ausserdem hat der Garbadge Collector so seine Probleme mit Bildern in Plugins, z.B. Customer Products.

Das Problem besteht bei mir, dass größere Importe ewig dauern, da wir bei manchen Produkten bis zu 10 Bilder haben. Da Kunden ja auch oft nicht nur per Import, sondern auch  direkt im Shop arbeiten und Bilder einstellen macht eine separate Bildstatus-Verwaltung auch nicht wirklich Sinn.

Schwierig wird eine Prüfung wenn ein neues Bild mit gleichem Namen genutzt wird. Dann musste zusätzlich die Größe oder andere Parameter geprüft werden. 

So, merge mode funktioniert. Es werden nun bei jedem Upload die Bilder überschrieben und nicht mehrfach angelegt.  Smile

Ich muss ja eh vor dem Upload per API abfragen, ob der Artikel existiert. Da erhalte ich auch die zugehörigen path-Angaben. Sieht so aus, wie wenn das bei mir der Dateiname des Bilds ohne Extension ist. Allerdings scheinen da Zeichen beim Upload zu verschwinden. Das Bild 12345.jp im Upload ergibt 12345, aber 12345—kopie.jpg ergibt im path 12345-kopie. So ein Mist, wieso werden da die zwei Bindestriche entfernt? Scheint so als wenn beim Upload der DAteiname in den Path „konvertiert“ wird. Vielleicht kann ich ja die Konvertierungsroutine oder den Grund in Shopware finden. Oder habe ich da einen Denkfehler?

Sofern hier immer der Bildname zurückkommen würde hätte ich mein Problem gelöst. Neue Bilder erhalten bei uns immer einen neuen Dateinamen und so könnte ich prüfen, ob in dem Request das neue BIld enthalten sein muss oder nicht. Das würde für größere Importe deutliche Geschwindigkeitsverbesserungen geben.

Ich habe im Backend von Shopware noch die Variable „Ajax timeout“ entdeckt. Kann man da die Laufzeit einzelner API-Requests verlängern?

Das Ajax Timeout ist nur für die Requests im Backend und unabängig von der API.

LG Andre

Ich stand bzw. stehe vor dem gleichen Problem. 

__options_images, replace = false fügt einfach die hochgeladenen Bilder hinzu, d.h. man hat dann mehrfach das gleiche Bild. Und __options_images, replace = true entfernt erst alle Bilder vom Artikel und fügt dann die hochgeladenen Bilder hinzu. D.h., angenommen, ein Artikel hat 3 Bilder und man möchte nur eines updaten und lädt nur dieses per API hoch. Dann hat der Artikel nur noch das hochgeladene Bild, die anderen wurden entfernt. Und so oder so werden die Bilder nicht gelöscht, d.h. man kommt um den Media Garbage Collector nicht herum.

Zurzeit mach ich es nun so: ich prüfe in meiner WaWi-Datenbank, ob sich ein Artikel-Bild seit dem letzten Update geändert hat. Falls ja, dann lade ich alle Bilder des Artikels erneut hoch. Außerdem läuft ein Cron-Job, der den Media Garbage Collector startet.

Falls es da eine bessere Lösung gibt, wäre ich für Hinweise dankbar.

Und noch eine Frage; wieso musst Du, sunflower, abfragen ob ein Artikel existiert? Verwendest Du nicht den batch-mode?

Danke für die Info mit den BIldern. Wieder was Neues gelernt. 

Der Batch-Mode erledigt nur mehrere Artikel in einem Request, wenn ich das richtig verstanden habe.

Meine CSV-Datei ist „strohdumm“. Ich erhalte eine Liste in der sowohl neue Artikel, als auch Updates für bestehende Artikel enthalten sind.

Da man per API eine Neuanlage mit PUT- und ein Update mit POST-Request durchführt, muss ich das bei jedem Artikel vorher prüfen. Da nutzt mir ein Batch nichts.

OK, doch besser ab und zu mal die Doku genauer zu lesen. Wink

Anscheinend verarbeitet der Batch-Mode neu und update. Doch wie wird das mit dem __options_images geregelt? Das gilt doch nur für Update, oder?

Mir geht es zum Einen um das korrekte Aktualisieren der Bilder und zum Anderen um Geschwindigkeit zu kriegen. Es sollten schon Imports von min. 1000 Artikeln möglich sein. Ich übermittle die Bilder-URLs mit dem Artikeldatenatz. Also müssen doch beim der Verarbeitung des Requests die Bilder durch Shopware vom externen Bilder-Server geladen werden. Deshalb denke ich macht es Sinn, in den Datensatz nur URLs einzufügen, wenn sich etwas an den Bildern geändert hat. Oder liege ich da ganz falsch?