ebaysdk - UploadJob/BulkDataExchange

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Holá Pythonistas,
meine Frage möchte ich erstmal ganz allgemein formulieren..: für den Abgleich von Preisen, Beständen und Lieferzeiten unseres shops mit denen auf eBay (und vielen anderen kleinen Spielereien..) wird schon mit Freude Python verwenden. Genauer gesagt soll nun eine Schnittstelle mittels der ebaysdk hergestellt werden. Die API ansich hat ja schon viel Schönes; in Sachen Übersichtlichkeit und Struktur.. ist nur wirklich ganz schön komplex!
Einzelne Artikel zu aktualisieren funktioniert geradezu bestechend einfach, nur haben wir ne ganze Menge Artikel im Sortiment und können daher, schon aus datenökonomischen Gründen, nicht jeden Artikel einzeln bearbeiten; dafür gibt's ja besagten UploadJobRequest/BulkDataExchangeRequest.. und nun zur eigentlichen Frage: in welcher python-ebaysdk API versteckt sich dieses Detail, ist es überhaupt implementiert.., gäbe es ein Variante, das in die Gänge zu bekommen? Konkrete Codebeispiele gibt es dazu noch nicht, ich bin derzeit eh noch am experimentieren, wie sich das alles hübsch mit all den anderen Dingen (eigener DB-Abgleich zu anderen Händlern, etc..) zusammenführen ließe.

Also, für einen Stupps in die richtige Richtung bin schon mal jetzt recht dankbar.. . .

Bei Fragen zu näheren Erläuterungen; immer raus damit.


Grüße ~.~
es gibt manche, die sind anders und andere, die sind genauso
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Hi,

ich hätte jetzt auf die schnelle das gefunden: https://github.com/timotheus/ebaysdk-py ... llel-Class

Ich hoffe es handelt sich um die selbe Bibliothek die du verwendest.
When we say computer, we mean the electronic computer.
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Hey,
ok, die Sache gestaltet sich doch etwas kniffliger, als anfänglich ausgeführt.. @sls: ja, das ist das, was ich verwende, nur geht es dort mehr um Parallelisierung.
Bei einfachen Abfragen funktioniert das alles schon sehr gut. Mit ein paar Zeilen ist schon so manches getan. Mit

Code: Alles auswählen

from ebaysdk.trading import Connection as Trading

api = Trading()
api.execute('GetSellerList', {*some_options*})
lassen sich beispielsweise alle gelisteten Artikel mit ner Menge anderer Infos abrufen. Nun gibts noch einige "Connections" mehr, in denen sich aber leider kein Hinweis auf besagten BulkDataExchangeRequest/UploadJob finden läßt. Das ist aber nötig, um die Menge der Daten ordentlich handhaben zu können.. Im Grunde genommen muß "nur" ein XML-Konstrukt zusammengeschustert werden. Das sähe dann in ungefähr so aus: https://developer.ebay.com/DevZone/larg ... ACall.html #Merchant Data Call Details.
Das übernimmt das sdk in manchen/den meisten? (die API Dokumentationen von eBay selbst sind dazu ganz schön umfangreich, daher kann ich noch nicht so recht überblicken, was im ebaysdk überhaupt eingebaut ist und wie man am besten damit umgeht) Fällen. Auch hab ich schon darüber nachgedacht, das von einer der vorgegebenen Klassen abzuleiten; bleibt weiter die Frage, welche davon sich am Besten dazu eignen könnte.

Lange Rede, kurzer Sinn: das ist letztlich wohl gar kein richtiges Pythonproblem, sondern vielmehr eines der eBay-Schnittstelle.. ~.~
es gibt manche, die sind anders und andere, die sind genauso
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Holá,
kleiner Zwischenruf für den geneigten Leser: gestern fand ich hier etwas interessantes. Das ist, glaub ich, ein ganz guter Ansatz für mein Vorhaben. Nur: das ist nun auch schon acht Jahre alt und daher schon sehr python2..
Die Lösung steckt also aller Wahrscheinlichkeit nach in der soa-connection. Die Schwierigkeit besteht nunmehr darin, die LMS-API ins ebaysdk zu integrieren oder aber die soa-connection der ebaysdk dazu zu bringen, das ordentlich zu bewerkstelligen. Mit beispielsweise

Code: Alles auswählen

from ebaysdk.soa import Connection as SOA

api = SOA(service='FileTransferService')
api.execute('createUploadJob')
bekomme ich ich einen TypeError (im header wird 'X-EBAY-SOA-SERVICE-NAME' nicht bzw. None gesetzt..). Das kann sicher die verschiedensten Ursachen haben.

Naja, ich werd mich mal tiefer in die Materie verstricken aber vielleicht kommt jemandem das Problem bekannt vor und kann sich etwas darunter vorstellen.. . .

ps.: im Moment ist's wahrlich kein ausgesprochenes Python-Problem (mehr, auf welche Weise die ebay-api korrekt angesprochen werden muß), zugegeben, aber ich bin zuversichtlich, daß das schon noch kommt, wenn's dann vernünftig pythonisiert werden muß.

saludos ~.~
es gibt manche, die sind anders und andere, die sind genauso
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Holá,
also, der Vorgang kann soweit als abgeschlossen betrachtet werden. Bei den Entwicklern der python-ebaysdk scheint kein großes Interesse zu bestehen, sich mit dem LMS zu beschäftigen, daher habe ich mir nun etwas selbst zusammengeschossen.. erste funktionstüchtige Gehversuche sind schon mal hier zu bestaunen. Die eigentliche Connection class ist so schon eigenständig zuverwenden, die anderen Skripte sind noch sehr speziell und eher an unserer eigenen Shopanbindung orientiert (das ist auch noch in einem frühen Entwicklungsstadium) und müßte noch mehr verallgemeinert werden.
Falls sich hier noch jemand damit auseinandersetzt, oder auch überhaupt, bin ich für jegliche Anmerkung und Anregung weit geöffnet. Ansonsten kann hier erstmal ein Haken drangemacht werden.

hasta luego ~
es gibt manche, die sind anders und andere, die sind genauso
Sirius3
User
Beiträge: 17797
Registriert: Sonntag 21. Oktober 2012, 17:20

@x2wr0: zu Deinem Code in merchant.py: Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. XML erzeugt man mit einer entsprechenden Bibliothek und nicht per Stringzusammenstückelung, da geht viel zu viel kaputt.
Und statt mit komplizierten Konstrukt in _get_resp_body_errors sich die Texte zu erzeugen geht auch einfach:

Code: Alles auswählen

for error in dom.findall('error'):
    error_severity = error.findtext('severity')
    error_domain = error.findtext('domain')
    error_message = error.findtext('message')
    error_id = error.findtext('errorId')
Variablennamen schreibt man komplett klein und man benutzt keine Abkürzungen.
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Hossa!
@Sirius3: das ging aber fix..! Dazu kann ich was erklären:
1. mit git übe ich grad noch; will heißen: der wirklich interessante Part befindet sich derzeit noch im dev-branch.
Jaja, ich weiß, aber das mit den Tabs is so ne Bequemlichkeitssache; jetzt verwende ich allerdings eine schickere IDE (PyCharm) und die kümmert sich ja auch ganz anständig darum. check!
2. Thema XML: hab da erstmal bei lxml reingeschnuppert und ehrlich gesagt, ist das auch für mich die elegantere Variante (also, das mit einer entsprechenden lib zu erledigen); kommt noch, steht schon auf der Agenda.
3. Das was sich in (ehemals) merchant.py befindet, ist zu einem recht großen Teil stumpf aus dem Original übernommen. Die ursprüngliche ebaysdk machte in der Anwendung schon ganz gut, was sie sollte.. Und dann war es mehr eine Konsistenzfrage. Ob das jetzt so auch die besten und schönsten Lösungen sind, stand erstmal auf einem anderen Blatt. Solche "Details" werden jetzt, nachdem es schonmal das macht, was es soll, erst relevant für mich. Da das ganze Ding eh noch in einem größeren Rahmen eingebettet ist, unterliegt sowieso noch so manches ganz grundlegenden Designfragen (unter uns: diese response_errors Geschichte gefällt mir so auch nicht, aber wie gesagt, da mußten erstmal ganz grundsätzliche Technikfragen gelöst werden).

Besten Dank trotzdem für die schnelle Anteilnahme ;) ~ und beste Grüße.. . .
es gibt manche, die sind anders und andere, die sind genauso
Antworten