Website-Suche

So arbeiten Sie mit der Woocommerce REST API mit Python


Wordpress ist wahrscheinlich das am häufigsten verwendete CMS der Welt (es wird geschätzt, dass fast 40% aller Websites mit der Plattform erstellt werden): Es ist sehr einfach zu installieren und zu verwenden und ermöglicht es auch Nicht-Entwicklern, Websites in wenigen Minuten zu erstellen.
Wordpress hat ein sehr großes Plugin-Ökosystem; Eine der bekanntesten ist Woocommerce, mit der wir eine Website in wenigen Schritten in einen Online-Shop verwandeln können. Das Plugin nutzt die Wordpress REST API-Infrastruktur; In diesem Tutorial sehen wir, wie Sie mit der Woocommerce-API mithilfe der Programmiersprache Python interagieren und zeigen, wie Sie Produkte und Kategorien auflisten, erstellen, aktualisieren und löschen können.

In diesem Tutorial lernen Sie:

  • So generieren Sie Woocommerce REST API-Anmeldeinformationen und aktivieren hübsche Permalinks
  • So interagieren Sie mit der Woocommerce-REST-API mithilfe von Python und dem Woocommerce-Paket
  • So erhalten Sie Informationen über die vorhandenen Woocommerce-Kategorien, erstellen, aktualisieren und löschen sie
  • So erhalten Sie Informationen über die bestehenden Woocommerce-Produkte
  • Wie man einfache und variable Produkte mit Variationen erstellt
  • Aktualisieren und Löschen eines Produkts

Verwendete Softwareanforderungen und Konventionen

Generieren von Woocommerce REST API-Anmeldeinformationen

Für dieses Tutorial gehen wir davon aus, dass wir eine funktionierende Instanz von Wordpress haben, auf der das Woocommerce-Plugin bereits installiert ist. Das erste, was wir tun müssen, ist, unsere Woocommerce REST API-Anmeldeinformationen zu generieren: Sie werden
in jeder HTTP-Anfrage verwendet, die wir ausführen werden. Das Generieren der Anmeldeinformationen ist sehr einfach; Alles, was wir tun müssen, ist, zu WooCommerce -> Einstellungen im vertikalen Menü zu navigieren, das wir auf der Wordpress-Verwaltungsseite finden:

Sobald wir uns auf der Seite mit den Plugin-Einstellungen befinden, klicken wir auf die Registerkarte "Erweitert" und dann auf
den Link "REST API", der sich unter dem Registerkartenmenü befindet. Auf der Seite, die
geöffnet wird, klicken wir auf die Schaltfläche "API-Schlüssel erstellen":

Uns wird das Formular zur Erstellung des API-Schlüssels angezeigt, und wir werden aufgefordert, Folgendes einzugeben:

  • Eine Beschreibung, die als Anzeigename verwendet wird, um die Anmeldeinformationen leicht zu identifizieren
  • Der Benutzer, der den Schlüssel verwendet
  • Die Berechtigungen, die dem Schlüssel erteilt werden (nur Lesen|Nur Schreiben|Lesen und Schreiben)

Beachten Sie, dass wir die Möglichkeit haben, mehrere Schlüssel mit unterschiedlichen Berechtigungen zu erstellen, um die für einen bestimmten Benutzer gewährten Vorgänge einzuschränken. Für dieses Tutorial erstellen wir einen API-Schlüssel mit Lese- und Schreibberechtigungen:

Wenn wir fertig sind, klicken wir auf die Schaltfläche "API-Schlüssel generieren", und sowohl der Verbraucherschlüssel als auch das Verbrauchergeheimnis werden generiert und uns angezeigt. Wir müssen sicherstellen, dass wir beide an einem sicheren Ort aufbewahren, da sie beim Verlassen der Seite versteckt werden:

Sobald unsere Schlüssel generiert sind, gibt es eine weitere Aktion, die wir vom Wordpress-Administrations-Backend aus ausführen müssen: Wir müssen sicherstellen, dass der richtige hübsche Permalink verwendet wird, sonst funktionieren die API-Endpunkte nicht. Um die Aufgabe zu erledigen, navigieren wir zu Einstellungen -> Permalinks im linken vertikalen Menü von Wordpress. Im Seitenmenü wählen wir "Beitragsname" und speichern dann die Änderungen:

Das ist alles, was wir auf der Wordpress-Seite tun müssen. Im nächsten Abschnitt werden wir sehen, wie Sie mit den Woocommerce-REST-APIs mithilfe von Python interagieren.

Installieren Sie das Woocommerce-Paket

In diesem Abschnitt werden wir sehen, wie Sie mit der Woocommerce-REST-API mithilfe der Programmiersprache Python interagieren. Anstatt den Code zu schreiben, den wir benötigen, um die HTTP-Anfragen von Grund auf neu auszuführen, werden wir das Woocommerce-Paket verwenden, das unsere Arbeit erleichtern wird. Um das Paket zu installieren, können wir pip, den Python-Paketmanager, verwenden. Wenn wir in einer virtuellen Umgebung arbeiten, die mit venv erstellt wurde, können wir Folgendes ausführen:

pip install woocommerce

Wenn wir keine virtuelle Umgebung verwenden, sollten wir das Paket zumindest nur für unseren Benutzer installieren. Um dies zu tun, fügen wir dem Befehl die Option --user hinzu, die wie folgt lautet:

pip install woocommerce --user

Sobald das Woocommerce-Paket installiert ist, können wir mit dem Schreiben unseres Codes beginnen.

Initialisieren der API-Klasse

Das erste, was wir tun müssen, um mit der Woocommerce-REST-API zu interagieren, indem wir Python und das Woocommerce-Paket verwenden, ist, die API-Klasse zu importieren und eine Instanz davon zu erstellen, wie unten gezeigt:

#!/usr/bin/env python3
from woocommerce import API

wcapi = API(
  url="http://localhost",
  consumer_key="ck_147eb955838043597462c3f9c4f91cba08498159",
  consumer_secret="cs_55a72d6c7bde09b7f36befed32aa90709261c097",
  timeout=50
)

Der API-Klassenkonstruktor akzeptiert drei obligatorische Argumente:

  1. Die URL unserer Website
  2. Der Woocommerce REST API-Verbraucherschlüssel
  3. Das Woocommerce REST API-Verbrauchergeheimnis

Im obigen Beispiel sehen Sie, dass wir ein drittes Argument übergeben haben, timeout: Es ist optional und beträgt standardmäßig 5 Sekunden. In diesem Fall geben wir einen größeren Wert dafür an: 50. In meinem Fall war dies notwendig, damit die Anfragen erfolgreich waren, aber in einem real
Lebensszenario sollten wir es nicht ändern müssen, sodass es ganz weggelassen werden kann.

Sobald wir eine Instanz der API-Klasse erstellt haben, in diesem Fall mit der Variablen wcapi, können wir fortfahren und unsere API-Aufrufe durchführen.

Kategorien

Für dieses Tutorial werden wir nur mit Kategorien und Produkten arbeiten. Die bereitgestellten Beispiele sollten ausreichen, um dem Leser eine Vorstellung davon zu geben, wie die API funktioniert. Beginnen wir mit Kategorien, da sie bereits existieren sollten, um bei der Erstellung von Produkten referenziert zu werden.

Erstellen einer Kategorie

Als erstes Beispiel sehen wir uns an, wie man eine Kategorie erstellt. Wir beginnen mit der Definition der Kategoriedaten in einem Python-Wörterbuch:

category_data = {
    "name": "Example category",
    "description": "Just a category example"
}

Der einzige obligatorische Parameter, den wir beim Erstellen einer Kategorie verwenden sollten, ist name, der als Zeichenfolge angegeben werden sollte. Im obigen Beispiel haben wir auch den Beschreibungsschlüssel angegeben, um eine kurze Beschreibung der Kategorie bereitzustellen (die vollständige Liste der Kategorieeigenschaften finden Sie in der offiziellen Dokumentation).

Nachdem wir das Wörterbuch mit den Kategoriedaten erstellt haben, können wir die API-Anfrage ausführen, die zum Erstellen der Kategorie verwendet wird und das HTTP-Verb POST verwendet:

response = wcapi.post("products/categories", category_data)

Wenn die Anfrage ohne Fehler ausgeführt wird, wird durch den Aufruf der json-Methode für das Antwortobjekt die Serverantwort im Format eines Python-Wörterbuchs zurückgegeben, das die Daten beschreibt, die zum Erstellen der Kategorie verwendet wurden: Dies schließt die eindeutige ID ein, die zum Speichern der Kategorie in der Datenbank verwendet wird, was eine wesentliche Information ist, wenn wir später darauf verweisen möchten (z. B. beim Erstellen einer Unterkategorie oder eines Produkts, das unter dem Kategorie selbst). In unserem Fall wird Folgendes vom Server zurückgegeben:

{
  'id': 17,
  'name': 'Example category',
  'slug': 'example-category',
  'parent': 0,
  'description': 'Just a category example',
  'display': 'default',
  'image': None,
  'menu_order': 0,
  'count': 0,
  '_links': {
    'self': [
      {'href': 'http://localhost/wp-json/wc/v3/products/categories/17'}
    ],
    'collection': [
      {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
    ]
  }
}

Wie wir sehen können, wurde die Kategorie mit 17 als eindeutige ID gespeichert.

Aktualisieren einer Kategorie

Um eine vorhandene Kategorie zu aktualisieren, müssen wir über ihre ID darauf verweisen, die als Teil des Anforderungsendpunkts enthalten sein sollte. Zuerst erstellen wir ein Wörterbuch, das die Kategoriedaten enthält, die aktualisiert werden sollen; Im folgenden Beispiel ändern wir die Kategoriebeschreibung:

category_data = {
  "description": "Modified category example"
}

Sobald die Daten bereit sind, können wir unsere Anfrage mit der put-Methode des wcapi-Objekts senden, das, wie Sie sich vorstellen können, eine Anfrage mit dem PUT-HTTP-Verb sendet:

response = wcapi.put('products/categories/17', category_data)

Wie zuvor werden wir durch Ausführen der json-Methode des Antwortobjekts die aktualisierten Kategorieinformationen abrufen, die vom Server zurückgegeben wurden und bereits in ein Python-Wörterbuch konvertiert wurden:

{
  'id': 17,
  'name': 'Example category',
  'slug': 'example-category',
  'parent': 0,
  'description': 'Modified category example',
  'display': 'default',
  'image': None,
  'menu_order': 0,
  'count': 0,
  '_links': {
    'self': [
      {'href': 'http://localhost/wp-json/wc/v3/products/categories/17'}
    ],
    'collection': [
      {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
    ]
  }
}

Einholung von Informationen über alle oder eine bestimmte Kategorie

Es ist wirklich einfach, eine Liste aller vorhandenen Kategorien zu erhalten. Alles, was wir tun müssen, ist, die get-Methode des wcapi-Objekts auszuführen, das wir zuvor erstellt haben, und den richtigen Endpunkt (Produkte/Kategorien) anzugeben:

response = wcapi.get('products/categories')

Wie zuvor kann auf den Inhalt der Antwort als Python-Dictionary zugegriffen werden, indem die json-Methode für das Antwortobjekt ausgeführt wird. In diesem Fall gibt die Methode Folgendes zurück:

[
  {
    'id': 17,
    'name': 'Example category',
    'slug': 'example-category',
    'parent': 0,
    'description': 'Just a category example',
    'display': 'default',
    'image': None,
    'menu_order': 0,
    'count': 0,
    '_links': {
      'self': [
        {'href': 'http://localhost/wp-json/wc/v3/products/categories/17'}
      ],
      'collection': [
        {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
      ]
    }
  },
  {
    'id': 16,
    'name': 'test',
    'slug': 'test',
    'parent': 0,
    'description': 'a test',
    'display': 'default',
    'image': None,
    'menu_order': 0,
    'count': 0,
     '_links': {
       'self': [
         {'href': 'http://localhost/wp-json/wc/v3/products/categories/16'}
        ],
        'collection': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
        ]
      }
    },
    {
      'id': 15,
      'name': 'Uncategorized',
      'slug': 'uncategorized',
      'parent': 0,
      'description': '',
      'display': 'default',
      'image': None,
      'menu_order': 0,
      'count': 0,
      '_links': {
        'self': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories/15'}
        ],
        'collection': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
        ]
      }
    }
  ]

Wenn wir Informationen über eine bestimmte Kategorie abrufen möchten, müssen wir lediglich ihre ID als Teil des Endpunkts angeben. Um beispielsweise Details über die Kategorie mit der ID 16 (Test) zu erhalten, würden wir Folgendes ausführen:

response = wcapi.get('products/categories/16')

Löschen einer Kategorie

Die ID einer Kategorie wird auch benötigt, um sie zu referenzieren, wenn wir sie löschen möchten. In diesen Fällen sollten wir eine HTTP-Anfrage ausführen, die das HTTP-Verb DELETE verwendet und wiederum die Kategoriekennung als Teil des Endpunkts bereitstellt. Um beispielsweise die Kategorie "Test" zu löschen, würden wir Folgendes ausführen:

response = wcapi.delete('products/categories/16', param={'force', True})

Beim Ausführen der delete-Methode zum Löschen einer Kategorie müssen wir auch den force-Parameter verwenden und ihn auf True setzen. Dies ist erforderlich, da das Verschieben einer Kategorie in den Papierkorb über die REST-API nicht unterstützt wird. Die Ressource wird dauerhaft entfernt. Wenn wie in den vorherigen Beispielen alles wie erwartet verläuft, wird beim Aufrufen der json-Methode für das Antwortobjekt ein Wörterbuch zurückgegeben, das die entfernten Ressourcendaten enthält.

Ausführen mehrerer Aktionen gleichzeitig

Angenommen, wir möchten mehrere Aktionen gleichzeitig ausführen: Wir möchten möglicherweise einige Kategorien löschen, einige neue erstellen und andere aktualisieren. Wie können wir dies auf einmal tun, indem wir nur eine Anfrage ausführen? Alles, was wir tun müssen, ist, eine Anfrage mit dem HTTP-Verb POST an den Endpunkt products/categories/batch zu senden, indem wir die Methode post des wcapi-Objekts verwenden. Hier ist ein Beispiel:

batch_data = {
  "create": [
    {
      "name": "New category 1",
      "description": "First new category"
    },
    {
      "name": "New category 2",
      "description": "Second new category"
    }
  ],
  "update": [
    {
      "id": 17,
      "description": "updated description"
    }
  ],
  "delete": [
    15
  ]
}

Die Batch-Daten werden, genau wie in den vorherigen Beispielen, mithilfe eines Python-Wörterbuchs definiert. In diesem Wörterbuch haben wir einige Schlüssel, die nach den Aktionen benannt sind, die ausgeführt werden sollen:

  • schaffen
  • aktualisieren
  • löschen

Der Wert, der dem create-Schlüssel zugewiesen wird, muss eine Liste von Wörterbüchern sein, die jeweils die Daten beschreiben, die zum Erstellen einer neuen Kategorie verwendet werden sollen. In diesem Fall haben wir zwei neue Kategorien mit den Namen "Neue Kategorie 1" und "Neue Kategorie 2" erstellt.

In ähnlicher Weise muss der Wert, der dem Aktualisierungsschlüssel entspricht, eine Liste von Wörterbüchern sein, die jeweils die Daten beschreiben, die zur Aktualisierung einer bestimmten Kategorie verwendet werden sollen, die durch ihre ID identifiziert wird.

Schließlich muss der Wert, der dem Löschschlüssel zugeordnet ist, eine Liste der ID der Kategorien sein, die gelöscht werden sollen. In diesem Fall haben wir uns entschieden, die Kategorie mit 16 als eindeutiger Kennung zu entfernen. Sobald unsere Daten bereit sind, führen wir die Anfrage
aus:

response = wcapi.post('products/categories/batch', batch_data)

Das Antwortobjekt enthält die objektorientierte Darstellung der vom Server gesendeten Antwort. Wie immer rufen wir durch Ausführen der json-Methode dieses Objekts das Python-Wörterbuch ab, das eine Zusammenfassung der durchgeführten Operation und die Beschreibung der beteiligten Kategorien enthält:

{
  'create': [
    {
      'id': 18,
      'name': 'New category 1',
      'slug': 'new-category-1',
      'parent': 0,
      'description': 'First new category',
      'display': 'default',
      'image': None,
      'menu_order': 0,
      'count': 0,
      '_links': {
        'self': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories/18'}
        ],
       'collection': [
         {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
        ]
      }
    },
    {
      'id': 19,
      'name': 'New category 2',
      'slug': 'new-category-2',
      'parent': 0,
      'description': 'Second new category',
      'display': 'default',
      'image': None,
      'menu_order': 0,
      'count': 0,
      '_links': {
        'self': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories/19'}
        ],
        'collection': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
        ]
      }
    }
  ],
  'update': [
    {
      'id': 17,
      'name': 'Example category',
      'slug': 'example-category',
      'parent': 0,
      'description': 'updated description',
      'display': 'default',
      'image': None,
      'menu_order': 0,
      'count': 0,
      '_links': {
        'self': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories/17'}
        ],
        'collection': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
        ]
      }
    }
  ],
  'delete': [
    {
      'id': 16,
      'name': 'test',
      'slug': 'test',
      'parent': 0,
      'description': 'a test',
      'display': 'default',
      'image': None,
      'menu_order': 0,
      'count': 0,
      '_links': {
        'self': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories/16'}
        ],
        'collection': [
          {'href': 'http://localhost/wp-json/wc/v3/products/categories'}
        ]
      }
    }
  ]
}

Produkte

Bisher haben wir gesehen, wie man die grundlegenden CRUD-Operationen für Kategorien ausführt. Lassen Sie uns jetzt mit Produkten arbeiten. Der Code, der verwendet werden sollte, ist ziemlich ähnlich. Was sich natürlich ändert, sind die API-Endpunkte und die Attribute, die beim Erstellen eines Produkts verwendet werden sollten
.

Erstellen eines einfachen Produkts

Das erste Beispiel, das wir sehen werden, ist, wie man ein "einfaches" Produkt ohne Variationen erstellt (Variationen sind leicht unterschiedliche Versionen desselben Produkts, die zum Beispiel auf unterschiedlichen Größen oder Farben basieren). Zuerst definieren wir die Produkt
Daten:

product_data = {
    "name": "Simple example product",
    "type": "simple",
    "regular_price": "22.50",
    "stock_quantity": 10,
    "short_description": "just an example product",
    "description": "This is just an example product, created with the Woocommerce REST API",
    "categories": [
      {
        "id": 17
      }
    ],

    "images": [
        {
            "src": "https://linuxconfig.org/images/linuxconfig_logo.avif",
            "alt": "example-image"
        }
    ]
}

Werfen wir einen Blick auf die Produktinformationen, die wir im product_data Wörterbuch verwendet haben. Wir haben den Produktnamen definiert (Einfaches Beispielprodukt), dann haben wir seinen Typ angegeben, der in diesem Fall "einfach" ist, da wir das Angebot für ein physisches Produkt ohne Variationen erstellen. Beide Informationen müssen als Zeichenfolgen angegeben werden.

Wir haben auch die Produkt regular_price (String), die Lagermenge (Integer), die short_description und die reguläre Beschreibung angegeben, beide als Zeichenfolgen: Diese werden in verschiedenen Teilen der Seite angezeigt, wenn das Produkt
von einem potenziellen Kunden visualisiert wird.

Als nächstes haben wir die Liste der Produktkategorien festgelegt, in die das Produkt aufgenommen werden soll. Jede Kategorie sollte durch ihre ID (Ganzzahl) referenziert werden. In diesem Fall haben wir einfach auf die Kategorie mit 17 als unique
Identifikator verwiesen ("Beispielkategorie").

Das letzte, was wir definiert haben, war die Liste der Bilder, die mit dem Produkt verknüpft werden sollen. Jedes Bild wird mit Hilfe eines Wörterbuchs beschrieben. Hier haben wir nur ein Bild verwendet, das src (Zeichenfolge) und alt (der alternative Text, wie
eine Zeichenfolge) angegeben hat.

Die von uns verwendeten sind nur eine sehr kleine Teilmenge aller möglichen Produkteigenschaften. Sobald unsere Daten bereit sind, senden wir eine POST-HTTP-Anfrage mit der post-Methode des wcapi-Objekts. Der Endpunkt, an den die Anforderung gesendet werden soll, lautet
"products":

response = wcapi.post('products', product_data)

Wenn die Anfrage erfolgreich ist, erhalten wir durch Ausführen von response.json() ein Python-Wörterbuch, das die Informationen des neu erstellten Produkts enthält:

{
  'id': 29,
  'name': 'Simple example product',
  'slug': 'simple-example-product',
  'permalink': 'http://localhost/product/simple-example-product/',
  'date_created': '2021-03-22T14:53:44',
  'date_created_gmt': '2021-03-22T14:53:44',
  'date_modified': '2021-03-22T14:53:44',
  'date_modified_gmt': '2021-03-22T14:53:44',
  'type': 'simple',
  'status': 'publish',
  'featured': False,
  'catalog_visibility': 'visible',
  'description': 'This is just an example product, created with the Woocommerce REST API',
  'short_description': 'just an example product',
  'sku': '',
  'price': '22.50',
  'regular_price': '22.50',
  'sale_price': '',
  'date_on_sale_from': None,
  'date_on_sale_from_gmt': None,
  'date_on_sale_to': None,
  'date_on_sale_to_gmt': None,
  'on_sale': False,
  'purchasable': True,
  'total_sales': 0,
  'virtual': False,
  'downloadable': False,
  'downloads': [],
  'download_limit': -1,
  'download_expiry': -1,
  'external_url': '',
  'button_text': '',
  'tax_status': 'taxable',
  'tax_class': '',
  'manage_stock': False,
  'stock_quantity': None,
  'backorders': 'no',
  'backorders_allowed': False,
  'backordered': False,
  'sold_individually': False,
  'weight': '',
  'dimensions': {
    'length': '',
    'width': '',
    'height': ''
  },
  'shipping_required': True,
  'shipping_taxable': True,
  'shipping_class': '',
  'shipping_class_id': 0,
  'reviews_allowed': True,
  'average_rating': '0',
  'rating_count': 0,
  'upsell_ids': [],
  'cross_sell_ids': [],
  'parent_id': 0,
  'purchase_note': '',
  'categories': [
    {
      'id': 17,
      'name': 'Example category',
      'slug': 'example-category'
    }
  ],
  'tags': [],
  'images': [
    {
      'id': 28,
      'date_created': '2021-03-22T14:53:44',
      'date_created_gmt': '2021-03-22T14:53:44',
      'date_modified': '2021-03-22T14:53:44',
      'date_modified_gmt': '2021-03-22T14:53:44',
      'src': 'http://localhost/wp-content/uploads/2021/03/linuxconfig_logo-3.png',
      'name': 'linuxconfig_logo-3.png',
      'alt': 'example-image'
    }
  ],
  'attributes': [],
  'default_attributes': [],
  'variations': [],
  'grouped_products': [],
  'menu_order': 0,
  'price_html': '<span class="woocommerce-Price-amount amount"><bdi>22,50<span class="woocommerce-Price-currencySymbol">&euro;</span></bdi></span>',
  'related_ids': [],
  'meta_data': [],
  'stock_status': 'instock',
  '_links': {
    'self': [
      {'href': 'http://localhost/wp-json/wc/v3/products/29'}
    ],
    'collection': [
      {'href': 'http://localhost/wp-json/wc/v3/products'}
    ]
  }
}

Erstellen eines variablen Produkts und seiner Variationen

Im vorherigen Beispiel haben wir ein "einfaches" Produkt erstellt. Sehen wir uns nun an, wie man ein "variables" Produkt erstellt. Die grundlegende Definition ist die gleiche wie die, die wir oben verwendet haben. Alles, was wir tun müssen, ist, die Attribute hinzuzufügen, die zusammen die Produktvariationen darstellen. Nehmen wir zum Beispiel an, dass es sich bei unserem Produkt um ein T-Shirt handelt, das in mehreren Farben und Größen erhältlich ist: Jede Variation besteht aus einer bestimmten Farbe, die mit einer bestimmten Größe verbunden ist:

variable_product_data = {
  "name": "Variable example product",
  "type": "variable",
  "short_description": "just a variable product",
  "description": "This is a variable product, created with the Woocommerce REST API",
  "categories": [
    {
      "id": 17
    }
  ],
  "images": [
      {
          "src": "https://linuxconfig.org/images/linuxconfig_logo.avif",
          "alt": "example-image"
      }
  ],
  "attributes": [
    {
      "name": "Color",
      "visible": True,
      "variation": True,
      "options": [
        "black",
        "white"
      ]
    },
    {
      "name": "Size",
      "visible": True,
      "variation": True,
      "options": [
        "S",
        "M",
        "L"
      ]
    }
  ]
}

Wir haben eine Liste von Attributen mit dem Schlüssel "attribute" im Produktwörterbuch bereitgestellt. Das erste Attribut heißt "Farbe" und das zweite "Größe". Wir haben beide so eingestellt, dass sie sichtbar sind, und wir haben deklariert, dass sie für Variationen verwendet werden sollten, indem wir True als Wert des Variationsschlüssels in den Wörterbüchern zugewiesen haben, der sie definiert. Die Liste, die dem Optionsschlüssel zugeordnet ist, enthält alle möglichen Werte, die jedes Attribut annehmen kann.

Über ein Produktattribut: Wir können sowohl globale als auch nicht-globale Attribute verwenden. Was ist der Unterschied? Attribute, die nur durch den Namen angegeben werden, wie wir es im obigen Beispiel getan haben, werden "on the fly" für das jeweilige Produkt erstellt, so dass sie "nicht-global" sind. Wenn wir das gleiche Attribut für mehrere Produkte verwenden wollten, sollten wir es besser vorher mit einem bestimmten Aufruf definieren und dann mit ihrer ID darauf verweisen. Angenommen, wir erstellen die globalen Attribute "Farbe" und "Größe" und sie haben jeweils 1 bzw. 2 als eindeutige Bezeichner, dann würden wir schreiben:

"attributes": [
    {
      "id": 1
      "visible": True,
      "variation": True,
      "options": [
        "black",
        "white"
      ]
    },
    {
      "id": 2,
      "visible": True,
      "variation": True,
      "options": [
        "S",
        "M",
        "L"
      ]
    }
]

Ganz wichtig: Der Code erstellt nicht die eigentlichen Produktvarianten, die mit separaten Anfragen definiert werden sollten.

Sie können feststellen, dass wir es versäumt haben, die Lagerbestandsmenge des Produkts anzugeben, da der Gesamtbestandswert durch die Summe der Lagermenge jeder Variante dargestellt wird.

Der nächste Schritt besteht darin, die eigentlichen Produktvarianten zu erstellen. Bei der Definition der Variationsdaten sollten wir die gleichen Attribute verwenden, die wir in der Anfrage definiert haben, die wir zum Erstellen der Variablen product verwendet haben. Hier ist ein Beispiel für das Erstellen einer Variante:

product_variation_data = {
    "regular_price": "18.00",
    "stock_quantity": 10,
    "attributes": [
        {
          "id": 1,
          "option": "white"
        },
        {
          "id": 2,
          "option": "S"
        }
    ]
}

Wir haben die Variation definiert, die durch die Kombination des Attributs "weiß" Farbe und des Attributs "S" Größe erzeugt wird. Wir setzen seine regular_price und stock_quantity. Wir sollten nun die Anfrage mit dem folgenden Code senden:

response = wcapi.post('products/34/variations', product_variation_data)

Wie Sie im obigen Snippet sehen können, haben wir als Endpunkt für die Anfrage products/34/variations verwendet, wobei 34 die ID des übergeordneten Produkts ist, das wir zuvor erstellt haben.

Anfordern von Informationen über alle Produkte oder ein bestimmtes Produkt

Genau wie bei den Kategorien können wir über die Woocommerce REST API Informationen zu allen vorhandenen Produkten anfordern:

response = wcapi.get('products')

Die Anfrage kann durch die Verwendung von Parametern weiter angepasst werden: Mit dem Parameter per_page können wir beispielsweise angeben, wie viele Elemente in der Ergebnismenge einer einzelnen Anfrage zurückgegeben werden sollen (Standard ist 10), und mit dem page-Parameter können wir die spezifische Seite anfordern, die zurückgegeben werden soll (Standard ist 1). Um die Anzahl der in einer einzigen Anfrage zurückgegebenen Elemente zu erhöhen, würden wir schreiben:

response = wcapi.get('products', params={'per_page': 20})

Das Anfordern von Informationen über ein bestimmtes Produkt ist genauso einfach: Alles, was wir tun müssen, ist, seine ID im Anfrageendpunkt anzugeben:

response = wcapi.get('products/34')

Aktualisieren eines Produkts

Die Logik, die zum Aktualisieren eines Produkts verwendet wird, ist die gleiche, die wir zum Aktualisieren einer Kategorie (und aller anderen "Entitäten", die über die REST-API verwaltet werden) verwendet haben. Wir geben die Produktdaten an, die aktualisiert werden sollen, und senden eine PUT-Anfrage an den Endpunkt, die die Produkt-ID enthält:

updated_product_data = {
  "description": "This is the updated variable product description"
}

response = wcapi.put('products/34', updated_product_data)

Löschen eines Produkts

Um ein Produkt zu löschen, müssen wir lediglich eine DELETE-Anfrage an den Endpunkt senden, die die Produkt-ID enthält:

response = wcapi.delete('products/34')

Hier können Sie feststellen, dass im Gegensatz zu dem, was bei Kategorien der Fall ist, die Verwendung des Parameters force nicht obligatorisch ist. Wenn der Parameter nicht verwendet wird, wird das Produkt einfach in den "Papierkorb" verschoben und kann so in letzter Zeit wieder abgerufen werden. Wenn der force-Parameter verwendet und stattdessen auf True gesetzt wird, wird das Produkt dauerhaft entfernt.

Schlüsse

In diesem Tutorial haben wir einige Beispiele gesehen, wie man mit der Woocommerce REST API mit der Programmiersprache Python interagieren kann. Wir haben gesehen, wie man API-Anmeldeinformationen generiert, wie man das Python-Paket "woocommerce" installiert, das nützliche Methoden bietet, die den Code vereinfachen, den wir schreiben sollten, um mit ihnen zu interagieren, und einige Beispiele für das Erstellen, Lesen, Löschen und Aktualisieren von Woocommerce-Kategorien und -Produkten. Bitte konsultieren Sie die offizielle Woocommerce REST API-Dokumentation, um einen vollständigen Überblick über die API-Funktionen zu erhalten.

Verwandte Artikel: