VariantenBilder im JSON mitgeben

Hallo.
Man kann ja nur 1 Bild pro Variante mitgeben.
Nach meinem Wissensstand können Variantenbilder in dieser Form (über imageID) angelegt werden:

{
  "product": {
    "title": "Produkt 2",
    "variants": [
      {
        "id": 345678,
        "title": "Variante A",
        "image_id": 901234
      },
      {
        "id": 456789,
        "title": "Variante B",
        "image_id": 123456
      }
    ],
    "images": [
      {
        "id": 901234,
        "src": "https://beispiel.com/bildA.jpg"
      },
      {
        "id": 123456,
        "src": "https://beispiel.com/bildB.jpg"
      }
    ]
  }
}

… jedoch muss dazu zuerst das Bild angelegt werden, um die ID zu bekommen … um danch die Variante mit der image-ID upzudaten.
Gibt es auch die Möglichkeit direkt der Variante das Bild mitzugeben ohne den Umweg über die ID? z.B.

 "variants": [
     {
       "option1": "L",
       "option2": "Blau",
       "price": "19.99",
       "sku": "1234",
"image":["src":"bildlink1"]
     },
     {
       "option1": "XL",
       "option2": "Blau",
       "price": "19.99",
       "sku": "1235"
"image":["src":"bildlink2"]
     },

Bei der Anlage des Hauptbildes organisiert Shopify im Hintergrund ja auch die IDs ohne das Zutun durch den Produktanleger … LG

Hey @JensUbert

Du versuchst also das JSON-Format zu verstehen, um Produkte mit den Bildern in Shopify anzulegen. Derzeit, erlaubt Shopify m. E. und wie du selber sagst, nur die Zuweisung eines Bildes pro Variante über die image_id. Du möchtest aber eine direkte Einbettung des Bild-URLs innerhalb der Produktvariante. Dies wäre definitiv intuitiver, wird aber von Shopify nicht nativ unterstützt, ausser ggf. mit einer App wie StarApps Variant Image. Es gibt jedoch Möglichkeiten, den Workflow zu automatisieren und zu optimieren.

Man kann z. B. einen automatisierten Prozess entwickeln, der zuerst das Bild hochlädt, die zurückgegebene ID erhält, und dann die Produktvariante mit der image_id aktualisiert.

Um auf deine spezifische JSON-Struktur einzugehen: Das Format, dass du vorschlägst, wenn du ein Objekt in einem Array (wie “image”) definieren möchtest, könnte es wie folgt mit geschweiften Klammern aussehen:

"image": {"src": "bildlink1"}

anstatt:

"image": ["src": "bildlink1"]

Diese Struktur mit direkten Bildlinks in den Varianten, würde natürlich den Prozess vereinfachen, ist aber nicht üblich, da sie die Datenintegrität und -struktur komplexer gestaltet. Wenn du jedoch direkte Bildverknüpfungen zu Varianten trotzdem brauchst, ohne eine ID zu verwenden, kannst du erwägen diese Datenstruktur außerhalb von Shopify zu halten und diese Daten dann nur zur Darstellung verwenden, z. B. in einer eigenen App. Dies wäre jedoch nicht direkt in Shopify und erfordert zusätzliche Entwicklungsarbeit. Es muss tatsächlich zuerst ein Ressourcenobjekt (in diesem Fall ein Bild) erstellt werden, um eine ID zu erhalten, die dann in einem anderen Ressourcenobjekt (hier einer Produktvariante) referenziert werden kann.

… ok. Danke erst einmal für die Hinweise. Bis auf Kleinigkeiten habe ich mir das schon aus den Dokus zusammengelegt :wink:

… wenn ich alss die ID für das Produkt und die die IDs für die Varianten habe müsste man ja durch ein POST mit

{
"products":
{"id":8661963604244,
"variants":
[
{"images":[{"src":"http://images.blue-tomato.com/is/image/bluetomato/305085394_front.jpg-XSyiqehytTU_uNam-OA22iivzhY/305085394+front+jpg.jpg"},{"alt":"Foundation Graphic T-Shirt dark sage"}],"id":46725824119060},
{"images":[{"src":"http://meinlink/305085394_front.jpg-XSyiqehytTU_uNam-OA22iivzhY.jpg"},{"alt":"Foundation Graphic T-Shirt dark sage"}],"id":46725824151828},
{"images":[{"src":"http://meinlink/305085394_front.jpg-XSyiqehytTU_uNam-OA22iivzhY.jpg"},{"alt":"Foundation Graphic T-Shirt dark sage"}],"id":46725824184596},
{"images":[{"src":"http://meinlink/305085394_front.jpg-XSyiqehytTU_uNam-OA22iivzhY.jpg"},{"alt":"Foundation Graphic T-Shirt dark sage"}],"id":46725824217364}
]}}

zum Ziel kommen. Ich bekomme aber ein 400|{“errors”:{“image”:“Required parameter missing or invalid”}}

Hallo,

ich habe nun verschiedene Versionen probiert und bekomme immer noch denselben Fehler: 400
Meine Vorgehensweise:

  • Produkt und Varianten sind per post und “admin/api/2023-07/products.json” angelegt.
  • es gibt bisher kein Image oder Images-Objekt oder Arrays
  • Für jede Variante des Produkts:
    • Erstellt ein neues images-Array für die Variante.
  • Fügt dem images-Array der Variante ein Objekt hinzu, das die folgenden Eigenschaften enthält:
    • position - Die Position des Bildes in der Liste der Bilder für die Variante.
    • src - Die URL des Bildes.
  • Verwendeung von post und admin/api/2023-07/products/(1234564564456=prodid)/images.json"

Diese vorgehensweise sollte richtig sein … aber will wohl nicht:

400|{“errors”:{“image”:“Required parameter missing or invalid”}}

{
  "products": {
    "id": 8664543166740,
    "title": "irgendein Tshirt",
    "variants": [
      {
        "id": 46735415148820,
        "image": [
          {
            "position": 1,
            "src": "http://meinlink/bild4.jpg"
          }
        ]
      },
      {
        "id": 46735415181588,
        "image": [
          {
            "position": 1,
            "src": "http://meinlink/bild3.jpg"
          }
        ]
      },
      {
        "id": 46735415214356,
        "image": [
          {
            "position": 1,
            "src": "http://meinlink/bild2.jpg"
          }
        ]
      },
      {
        "id": 46735415247124,
        "image": [
          {
            "position": 1,
            "src": "http://meinlink/bild1.jpg"
          }
        ]
      }
    ]
  }
}

@Gabe … habe weiter ausprobiert und verschiedene Variante ausprobiert. JSON-technisch ist das vollkommen in Ordnung aber ich verstehe hier scheinbar nicht die Shopify-Spezifikationen —

Hey @JensUbert

Wow du hast ja viel Arbeit in diese Sache gesteckt! Ich hoffe ich kann dir hier weiterhelfen. Hast du deine Fragen auch in unserer Englischen Community gestellt wo es API Experten und Partner gibt?

M. E. müssen Bilder zuerst unabhängig von Varianten oder Produkten hinzugefügt werden, und dann kann man die ID dieses Bildes verwenden, um es einer bestimmten Variante zuzuweisen. Deine aktuelle JSON-Struktur versucht, das Bild also direkt der Variante hinzuzufügen, was Shopify nicht direkt unterstützt.

Hier ist, wie du das ggf. ausprobieren kannst: füge zuerst das Bild zum Produkt hinzu, indem du die images.json API verwendest:

POST /admin/api/2023-07/products/PRODUCT_ID/images.json
{
  "image": {
    "src": "URL_DES_BILDES"
  }
}

Dann nachdem du das Bild erfolgreich hinzugefügt hast, solltest du die Response bekommen, die die ID des Bildes enthält und sie einer bestimmten Variante zuweisen:

PUT /admin/api/2023-07/products/PRODUCT_ID/variants/VARIANT_ID.json
{
  "variant": {
    "id": VARIANT_ID,
    "image_id": IMAGE_ID
  }
}

Das bedeutet, dass du für jeden Bild-Upload zwei API-Aufrufe durchführen müssen: einen, um das Bild hochzuladen, und einen weiteren, um es einer Variante zuzuweisen.

Der 400-Fehler, den du erhälst, deutet darauf hin, dass die Daten, die du sendest, nicht der erwarteten Struktur entsprechen.

Hoffe das hilft dir etwas weiter! :wink:

Ja, so mache ich es jetzt auch bzw. habe es schon teilweise um gesetzt. Bilde die Shopify-ID-Struktur (Produkt, Varianten, Bilder) verknüpft mit unseren VariantenIds(SKUs), Artikelnummern und unserem Mediensystem … ab.

Verwendet wird TalendETL.

1 Like