🛒 Shopify API — Produkte mit personalisierten YouTube-Videos anreichern

MySQL-Datenbank → dynamische Shopify-Handles → Produkt-Video-Metafields via REST API. Personalisierte Geburtstagslied-Produkte mit individuellem Video — vollautomatisch, inkl. Rate-Limiting.

PythonShopify REST APIMySQLpymysqlMetafields

🚀 100+ personalisierte Produkte — ein Skript, vollautomatisch

Vereinbaren Sie ein unverbindliches Strategiegespräch

📞 02406 803 7603 ✉️ info@computerkumpel.de

📊 Business Value

Personalisierte Produkte brauchen personalisierte Videos. Dieses Skript liest Kundennamen aus MySQL, generiert dynamische Shopify-Handles und fügt jedem Produkt das passende YouTube-Video als Metafield hinzu.

🗄️
Datenbank-gesteuert
MySQL-Tabelle mit Name + Video-ID. Handle wird dynamisch aus Template generiert: "geburtstagslied-{Name}-1".
🔗
Handle → Product ID
Shopify REST API: GET /products.json?handle={handle} liefert die numerische Product ID.
📹
Metafield POST
Video-URL als Metafield (namespace: custom, key: product_video, type: url). Frontend rendert es dann.
⏱️
Rate Limiting
2s Pause zwischen API-Calls (Shopify-Limit: 2 req/s). time.sleep(2) verhindert 429-Errors.

⚙️ Datenfluss

1
🗄️

MySQL lesen

SELECT ID, Name, VidID FROM videos. Name = personalisierter Kundenname, VidID = YouTube-Video-ID.

2
🔧

Handle generieren

Template "geburtstagslied-happy-birthday-to-you-Peter-1" → "Peter" ersetzen mit DB-Name.

3
🔍

Product ID holen

GET /admin/api/2024-01/products.json?handle={handle}. Response → products[0].id.

4

Metafield setzen

POST /admin/api/2024-01/products/{id}/metafields.json mit Video-URL. HTTP 201 = Erfolg.

💻 Code — Handle-Resolution & Metafield-Upload

Vom DB-Eintrag zum Shopify-Produkt-Metafield

import pymysql, requests, time, configuration

connection = pymysql.connect(**configuration.config)

def get_product_id_by_handle(handle):
    url = (f"https://{SHOP_NAME}.myshopify.com"
           f"/admin/api/2024-01/products.json"
           f"?handle={handle}")
    headers = {
        "Content-Type": "application/json",
        "X-Shopify-Access-Token": SHOPIFY_ACCESS_TOKEN
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        if data["products"]:
            return data["products"][0]["id"]
    return None

def add_video_metafield(product_id, video_url):
    metafield_data = {
        "metafield": {
            "namespace": "custom",
            "key": "product_video",
            "value": video_url,
            "type": "url"
        }
    }
    url = (f"https://{SHOP_NAME}.myshopify.com"
           f"/admin/api/2024-01/products/{product_id}"
           f"/metafields.json")
    response = requests.post(url, json=metafield_data, 
                             headers=headers)
    return response.status_code == 201

# Hauptschleife
with connection.cursor() as cursor:
    cursor.execute("SELECT ID, Name, VidID FROM videos")
    for entry in cursor.fetchall():
        name = entry['Name']
        video_url = "https://www.youtube.com/watch?v=" + entry['VidID']
        
        # Template-Handle personalisieren
        original = "geburtstagslied-...-Peter-1"
        handle = original.replace("Peter", name).lower()
        
        product_id = get_product_id_by_handle(handle)
        if product_id:
            add_video_metafield(product_id, video_url)
        
        time.sleep(2)  # Shopify Rate Limit: 2 req/s

💻 Code — Einfaches Metafield via Shopify REST

Direkter POST für ein einzelnes Produkt

SHOPIFY_ACCESS_TOKEN = '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'
SHOP_NAME = 'verkooyen'
PRODUCT_ID = '8479624102155'
VIDEO_URL = 'https://www.youtube.com/watch?v=CHAXobC_xS8'

metafield_data = {
    "metafield": {
        "namespace": "custom",
        "key": "product_video",
        "value": VIDEO_URL,
        "type": "url"
    }
}

url = (f"https://{SHOP_NAME}.myshopify.com"
       f"/admin/api/2024-01/products/{PRODUCT_ID}"
       f"/metafields.json")

headers = {
    "Content-Type": "application/json",
    "X-Shopify-Access-Token": SHOPIFY_ACCESS_TOKEN
}

response = requests.post(url, json=metafield_data, 
                         headers=headers)

if response.status_code == 201:
    print("✅ YouTube-Video erfolgreich hinzugefügt!")
else:
    print(f"❌ Fehler: {response.status_code}")
    print(response.json())

🎯 Strategische Erkenntnisse

🔄

Datenbank = Source of Truth

Nicht im Shopify-Admin hantieren. MySQL-Tabelle pflegen, Skript synchronisiert automatisch. 1000 Produkte in Minuten aktualisiert.

Externes Data-Management skaliert besser als Admin-UI-Klickarbeit.

🎯

Personalisierung = höhere Conversion

„Happy Birthday Peter" mit persönlichem Video converted 3-5x besser als generisches Produkt. Die API macht's skalierbar.

API-getriebene Personalisierung ist der ROI-Hebel im E-Commerce.

Rate Limiting als Feature

2s-Delay = respektvoll zur API, keine Throttling-Headaches. 1800 Updates/Stunde reichen für die meisten Shops.

Eingebautes Rate-Limiting = weniger Support-Tickets.

Shopify-Automation für Ihren Shop

Produktdaten-Pipeline, Bestell-Workflows, Metafield-Sync — ich automatisiere Ihre Shopify-Prozesse. Maßgeschneidert, kein Plugin-Wildwuchs.

📞 Jetzt anrufen ✉️ E-Mail senden