mit API komplette XML-Datei importieren

Hallo zusammen, ist es mit der API möglich eine Artikel-XML-Datei einzulesen? Ziel ist es eine WaWi automatisiert mit dem Shop abzugleichen. Die WaWi erstellt eine XML Datei der Artikel. Über die Importfunktion im Backend wird die Datei auch problemlos importiert. Per FTP wird die Datei auf den Shop-Server übertragen und nun würde ich gerne die Daten aus der XML-Datei importieren ohne die einzelnen Artikel-Daten in Array-Form zu bringen um diese mit der API zu importieren. Gruß

Hi, der Import im Backend macht aber auch nichts anderes, als das XML in ein Array zu konvertieren. Das ist ja auch nötig damit die Daten für die DB-Tabelle vorbereitet werden können. Und ohne Konvertierung müsste das XML-Konstrukt ja trotzdem durchlaufen werden um die verschachtelten Daten zu erhalten. Oder geht es dir nicht um Performance sondern um eine API-Funktion womit man XML in Array konvertieren kann? Vg,

[quote=“T.Berge”]Oder geht es dir nicht um Performance sondern um eine API-Funktion womit man XML in Array konvertieren kann?[/quote] Fast. Ich möchte mir halt sparen die XML-Datei selber in Arrays umzuwandeln. Vielleicht hat ja die Api sowas in der Art: Api->import->(“import.xml”)? Ich habe da leider nichts gefunden. Gruß

Hi, unsere API hat eine eingebaute Convert Funktion. Hierüber solltest du CSV und XML Dateien einlesen und schreiben können. So kannst du dir das Convert Object holen: $xml = Shopware()-\>Api()-\>convert-\>xml; Mit $xml-\>encode(... kannst du Arrays wieder in XMLs Format schreiben. Versuch es also einmal mit $xml-\>decode(.... Die Klasse hierzu befindet sich unter /engine/connectors/api/convert/xml.php. Hier solltest du dann alles finden, was du benötigst. Grüße, Marcel

Hallo, das hört sich schon gut an. Leider funktioniert der Import trotzdem nicht. Mein Code: require\_once('../engine/connectors/api/api.php'); $api = new sAPI(); $import =& $api-\>import-\>shopware; $xml =& $api-\>convert-\>xml; $shopware\_arr = $xml-\>decode('shopware.xml'); $articles = $shopware\_arr['shopware']; foreach ($articles as $article) { $import-\>sArticle($article); } Wenn ich den Import übers Backend durchführe, wird die XML-Datei problemlos importiert. Die XML-Datei habe ich entsprechend diesen Vorgaben erstellt: Import von Artikeln. Wenn ich den obigen Code ausführe passiert leider garnichts. Über var\_dump($import-\>sArticle($article)); in der Schleife bekomme ich einmal ein false zurück, aber eigentlich sollte das doch funktionieren. Wo ist mein Denkfehler??

Hi, du solltest hier einmal Schritt für Schritt vorgehen. Bekommst du hier $xml-\>decode('shopware.xml') bereits eine passender Rückgabe? Wenn ja überprüfe bitte die Form des Arrays ob die so direkt wieder importiert werden kann, oder ob du hier die Struktur noch anpassen musst(Array Hierarchie etc.). In diesem Artikel ist beschrieben in welcher Form die Funktion das Array erwartet: http://wiki.shopware.de/Import-Export-I … l_480.html. Grüße, Marcel

[quote=“Marcel S”]Array Hierarchie[/quote] Das war ein gutes Stichwort. Die einzelnen Artikel-Arrays liegen in der dritten Ebene des zurückgegeben Arrays. Nachdem ich das berücksichtigt habe, funktioniert der Import auch Reibungslos. Danke. Beim nächsten Schritt des Artikel-Imports wäre ich auch für einen Hinweis dankbar. Da bei vielen der importierten Artikel die Bilder noch fehlen, werden diese in nächster Zeit nachgeliefert. Die Datenzusammenstellung für die API-Import-Funktion sArticleImages ist kein Thema. Beim Import allerdings kommt man schnell an die Zeitbeschränkungen des Servers. Wie wurde dieses beim Backend-Import gelöst und kann man diese Lösung auch auf den API-Import anwenden? Gruß

Hi, beim Backendmodul werden einzelne Requests geschickt. Also alle 10 Artikel ein neuer Request. Dadurch gerät natürlich der Server nicht so schnell in ein Timeout, da bei jedem Request die Zeit von 0 beginnt. Dies ist natürlich allein durch die API nicht möglich. Hier kann man am besten einfach die Serverlaufzeit hochsetzen. Dies wäre auch ein komplett neues Thema. Ich gehe davon aus, dass dein Grundproblem gelöst ist. Grüße, Marcel

1 Like

Ja. Das Hauptproblem ist gelöst. Danke. :slight_smile: