Wie bekomme ich den Cardmarket-Preis einer Sammelkarte von einem Foto?
Direkte Antwort
Schick das Foto an eine API zur Kartenerkennung, die Cardmarket-Preise mit der Karte zurückgibt. Die NeoSatoshi Detection API beantwortet eine einzige POST-Anfrage mit Name, Set, Nummer, Cardmarket-Produkt-ID und den Cardmarket-Preisen der Karte in EUR (Trend, Tiefstpreis, 7- und 30-Tage-Schnitt), täglich aktualisiert, für Pokémon, One Piece, Disney Lorcana, Yu-Gi-Oh!, Magic und Star Wars: Unlimited. Wo das Foto den Druck nicht belegt, bleibt der Preis absichtlich leer, statt einen günstigeren zu raten.
Was im Preisblock steht
prices.cardmarket:trend,low,avg7undavg30in EUR. Ein fehlender Preis istnull, nie 0.prices.cardmarket_foilbei Lorcana, Magic und Star Wars: Unlimited, die Foil-Preise mit denselben Feldern. Das Foto zeigt nicht immer, ob eine Karte Foil ist, prüf also die Finish-Felder deines Spiels in der Doku.prices.tcgplayerin USD, wo vorhanden.cardmarket_id: die Cardmarket-Produkt-ID (idProduct) genau dieses Drucks. Sie ist der feste Schlüssel für Cardmarket-Importe und deine eigenen Preisabfragen später.
Vom Foto zum Angebotspreis in Python
Das Skript nutzt scan.py aus der Anleitung für die Scanner-App, die mit dem öffentlichen Demo-Schlüssel läuft (10 Erkennungen pro Tag, ohne Anmeldung). Es nimmt den Trendpreis, rechnet einen Aufschlag und einen Mindestpreis dazu und überlässt Karten ohne sicheren Druck einem Menschen. Starte python prices.py karte.jpg oder python prices.py karte.jpg magic.
Python: prices.py
import sys
from scan import detect # scan.py from the scanner app tutorial
MARKUP = 1.10 # 10 % above the Cardmarket trend
MINIMUM = 0.25 # never below this, in EUR
def open_printing(card):
"""The card is known but not which printing or rarity: ask, do not guess."""
return any(card.get(k) for k in ("print_unconfirmed", "rarity_unconfirmed", "version_unconfirmed"))
def listing_price(card):
if open_printing(card):
return None
cm = (card.get("prices") or {}).get("cardmarket") or {}
base = cm.get("trend") if cm.get("trend") is not None else cm.get("avg30")
if base is None:
return None # no price is null, never 0
return max(round(base * MARKUP, 2), MINIMUM)
tcg = sys.argv[2] if len(sys.argv) > 2 else "pokemon"
for card in detect(sys.argv[1], tcg)["cards"]:
price = listing_price(card)
print(
card.get("name"),
"| Cardmarket ID", card.get("cardmarket_id"),
"|", f"{price:.2f} EUR" if price is not None else "no price, ask the seller",
)Wenn kein Preis kommt
print_unconfirmed(Yu-Gi-Oh!, Magic, Star Wars: Unlimited): Die Karte ist bekannt, ihr Druck nicht. Die Preise einer Karte können sich zwischen Drucken um den Faktor 100 unterscheiden, deshalb lässt die API den Preis leer und listet die Drucke mit ihren eigenen Preisen inalternatives.rarity_unconfirmedundversion_unconfirmed(Yu-Gi-Oh!): Der Preis ist die günstigste Option, die anderen sind aufgelistet. Lass deine Nutzer wählen, bevor du verkaufst.version_unconfirmed(Star Wars: Unlimited): Nur der Name wurde gelesen, also kann sogar die Version der Figur falsch sein. Zeig die Alternativen einem Menschen.- Einige wenige Karten haben noch kein Cardmarket-Produkt oder keinen Preis. Dann sind die Felder
null.
Welchen Preis nehmen
Trend ist ein guter Standard für ein Angebot. Der 30-Tage-Schnitt ist ruhiger bei Karten, die selten verkauft werden, und low ist die Untergrenze, die andere Verkäufer verlangen. Die Preise gelten für die Karte, nicht für ihren Zustand: Die API beurteilt den Zustand nicht, senk den Preis bei bespielten Karten also selbst. Bei einem gegradeten Slab bleiben sie der Preis der Rohkarte.
Häufige Fragen
Wie aktuell sind die Preise?
Sie werden einmal täglich aus dem Cardmarket-Preisguide aktualisiert, bewegen sich also mit dem Markt, aber nicht innerhalb des Tages.
Bekomme ich den Preis auch ohne Foto?
Die Detection API startet immer mit einem Foto. Kennst du die Karte schon, speichere ihre cardmarket_id aus dem ersten Scan und nutze sie ab dann als Schlüssel.
Was kostet das?
Ein Karten-Scan pro erkannter Karte, der Preis kommt mit. Ein Foto ohne Karte kostet nichts. Pläne: Preise.
Weiterlesen
Doku und Demo-Schlüssel holen
Alle Preisfelder pro Spiel, Live-Beispiele und ein Testfeld für dein eigenes Foto. 10 kostenlose Erkennungen pro Tag, ohne Anmeldung.
Für die ersten 10 Erkennungen ist kein Account nötig.