Produktbeschreibungen via PHP SDK import

  • Guten Tag liebe Community,

    In letzter Zeit beschäftige ich mich sehr umfangreich mit Wordpress, da ich in Zukunft einen Online Shop für Gamekeys betreiben möchte. Aktuell befinden sich in meiner SQL Datenbank über 4000 Produkte. Für den deutschen Markt habe ich selbstverständlich die Datenbank ziemlich gut gefiltert. Das Ergebnis sind 1920 Produkte, die hier angeboten werden können.

    Nun stehe ich vor der Herausforderung die Produktbeschreibungen bei WooCommerce einzupflegen. Der Großhändler liefert eine relativ unsaubere Datenmenge, somit lassen sich die Produktbeschreibungen weder über eine CSV Datei noch über die API des Warenwirtschaftssystems (Billbee) importieren.

    Deshalb habe ich mich dazu entschlossen die Beschreibungen direkt über die WooCommerce PHP SDK zu importieren.
    -> Führt allerdings auch zu keinem großen Erfolg.

    Bei den meisten Produkten werden die Beschreibungen leider nicht importiert.

    PHP Code

    Spoiler anzeigen

    Hier ist eine Beispielbeschreibung die nicht importiert werden konnte.

    Spoiler anzeigen
    Code
    Ein heftiger Sturm verursacht die Zombieapokalypse und stellt dich vor eine noch die dagewesene Herausforderung. Du musst die Überlebenden durchfüttern, die langfristige Versorgung deiner Kolonie sichern und ganz nebenbei die einfallenden Zombiemassen zurücktreiben.<br><br>Es ist ein Time Management Game der etwas anderen Art. Die Fröhlichkeit eines Casualgames kollidiert mit Elementen, die sonst nur aus dem Horror-Genre bekannt sind. Erlebe den Kontrast, der beide Genres auf die Schippe nimmt!<h2>Kern Features</h2><br><ul><li>Kombiniert Elemente aus Farming, Tower Defense und Time-Management Genres<br></li><li>Bebaue deine Farm mit vielen verschiedenen Früchten, Gemüsesorten und Tieren<br></li><li>Baue, leite und verbessere dein eigenes Restaurant und koche eine Reihe von unterschiedlichen Gerichten<br></li><li>Verteidige deine Farm indem du Labyrinthe aus Zäunen erbaust und sie mit Türmen sicherst. Unsere Zombies sind die bösartigsten Vegetarier, die du je gesehen hast<br></li><li>Gestalte und kleide deinen eigenen Charakter<br></li><li>Verliere dich in einem unblutigem, fruchtigen Überlebenskampf<br></li><li>Die Story bietet 5-6 Stunden Spielspaß<br></li><li>Friedlicher Modus für entspannte Farmer<br></li><li>Originaler Soundtrack</li></ul


    Hat jemand evtl eine gewisse Ahnung oder evtl eine Vermutung weshalb das aktuallisieren der Produktbeschreibungen bei einigen Produkten scheitert ?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Was gibt Dein Code denn genau aus, wenn ein Eintrag scheitert?

    Und wie genau sehen die Quelldaten aus?

    Manchmal kommt sowas (manches geht, manches nicht) durch falsche UTF-8 Kodierung, wenn Sonderzeichen im Text vorkommen.

    Bei der Beispielbeschreibung fehlt übrigens ganz am Ende das > bei </ul>

  • Was gibt Dein Code denn genau aus, wenn ein Eintrag scheitert?

    In der Konsole erscheint keine Fehlermeldung. Die Beschreibung wird einfach nur nicht aktualisiert bei Woo.


    Und wie genau sehen die Quelldaten aus?

    Die Daten werden direkt aus meiner Datenbank gezogen. Das Attribut dDescription (wo die Produktbeschreibungen gespeichert werden) ist vom Datentypen 'LONGTEXT'.

    Manchmal kommt sowas (manches geht, manches nicht) durch falsche UTF-8 Kodierung, wenn Sonderzeichen im Text vorkommen.

    Wenn ich die Funktion utf8_encode() mit einbaue im PHP Script führt es zum gleichen Ergebnis.


    Bei der Beispielbeschreibung fehlt übrigens ganz am Ende das > bei </ul>

    Das liegt daran, dass der Großhändler eine sehr unsaubere Datenbank hat. Die habe ich mir über eine API Schnittstelle runtergeladen.

  • Dein PHP-Code enthält [FONT=Courier New]echo[/FONT] Befehle, also sollte er was ausgeben.

    Tipp: Durch das Hinzufügen von weiteren [FONT=Courier New]echo[/FONT] oder [FONT=Courier New]print_r[/FONT] Befehlen kann man ggf. noch genauer nachvollziehen, welche Variable wo welchen Wert hat, z.B. ähnlich wie hier (ungetestet!):

    PHP
    $put_result = $woocommerce->put( $wooProduct, $data );
                    if ( $put_result ) {
                        echo "Produktbeschreibung von " . $wooId . " erfolgreich aktualisiert\n";
                    } else {
                        echo "ERROR:\n";
                        print_r( $put_result );
                    }

    Falsche UTF-8 Kodierung behebt man nicht zwangsläufig durch das Einbauen von [FONT=Courier New]utf8_encode()[/FONT].

    6 Mal editiert, zuletzt von b3317133 (11. April 2019 um 19:26)

  • Fast alle echo Befehle sind auskommentiert.

    Nur zwei davon sollten ausgeführt werden nach dem laden der 'WooProductIds'. In jedem Fall wird folgendes ausgegeben :

    Code
    Produktbeschreibung von 49633 erfolgreich aktualisiert

    Es gibt keine Fehlermeldungen, da das Script niemals in den "Error Block" rein geht.

    Wie könnte man ansonsten die falschen UTF-8 Kodierungen beheben ?

    Deinen Rat mit print_r($put_result) habe ich mir zu herzen genommen & mal ein Produkt rausgesucht, welches nicht aktualisiert wurde.


    Konsolenausgabe

    Spoiler anzeigen

    Tatsächlich beinhaltet das Produkt keine Produktbeschreibung im PUT Array.

    Hier ist die Produktbeschreibung aus der Datenbank.

    Spoiler anzeigen
    Code
    <img src="https://steamcdn-a.akamaihd.net/steam/apps/489370/extras/STEAM_GRAPHIC_DE.jpg?t=1541711098" >

    Die Erklärung bei dem Produkt ist natürlich, dass die '<img src=''>' Tags rausgenommen werden sollen vom Script.

    Ein weiterere mögliche Fehlerquelle könnte sein, dass ich die Produktbeschreibung mit mehreren hundert Zeichen versucht habe in die shortDescription bei Woo hochzuladen. Nun funkt es mehr oder weniger wunderbar :)

    Vielen Dank @[size=14]b3317133 [/SIZE]

  • Deinen Rat mit print_r($put_result) habe ich mir zu herzen genommen & mal ein Produkt rausgesucht, welches nicht aktualisiert wurde.
    ...
    Tatsächlich beinhaltet das Produkt keine Produktbeschreibung im PUT Array.

    Das ist das Ergebnis des Put-Aufrufs. Wenn Du wissen willst, was im PUT Array steht, solltest Du [FONT=Courier New]$data[/FONT] ausgeben.

  • Wie ein kleiner Befehl ein Rätsel auflösen kann ist echt unglaublich.

    Noch besser wäre es, wenn ich mir einfach mal den Inhalt aus der Datenbank & $data in einer .txt Datei strukturiert speichern lasse.

    So kann man relativ schnell feststellen, was zum Fehler geführt hat.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!