Neues Thema starten

REAL API

 Hallo zusammen,


ich würde gerne  Tickets direkt über die Real API abrufen, scheitere aber noch an der HM-Signature, bzw. wie ich den UNIX timestamp so einbinde, dass der Request auch zu einem Ergebnis führt.


Hat hier jemand einen Tipp?


Beschrieben ist es hier: https://www.real.de/api/v1/?page=rest-api


Danke für eure Hilfe vorab und Grüße

Enrico


 Hi Stefan,


das heißt ich könnte hier mit NextURL arbeiten und den offset jedesmal um die entsprechende Anzahl erhöhen.

Ich müsste aber für jeden offset der abgerufen wird sie Signatur neu berechnen.

Du hattest vorher schonmal geschrieben, das würde dann im Mapper Sinn machen. Sprich ich baue mir da einen counter ein und setze den dann jeweils als offset so dass der counter um die entsprechende Menge hochzählt oder habe ich einen Denkfehler?


VG

Enrico


Hallo Enrico, 


an dieser Stelle würde das theoretisch auch ohne Spreadsheetmapper funktionieren. Das hätte aber wahrscheinlich viel mit rumprobieren zu tuen.

Du kannst ja alles was du im Moment im textHTMLWriter hast auch in den Header selbst reinpacken. Soweit ich weiß wird der Header pro Call immer neu berechnet, also würde das da auch immer neu ausgeführt werden. Das müsste aber @synesty mal beantworten.

Wenn dir das aber mit dem Spreadsheetmapper + SpreadsheetURLDownload einfacher ist, dann mach es so wie du willst :) 


Viele Grüße

Stefan 

 "Du kannst ja alles was du im Moment im textHTMLWriter hast auch in den Header selbst reinpacken. Soweit ich weiß wird der Header pro Call immer neu berechnet, also würde das da auch immer neu ausgeführt werden."

Das macht natürlich dann viel mehr Sinn.

@Synesty, habt ihr einen Tipp, wie ich das direkt im Api Call lösen kann, so dass pro call der offset um 30 steigt sowohl in der Signatur als auch in der direkten URL?


Danke für deine Hilfe Stefan!


Hallo nochmal,


ich habe nun alles in den API-Call Step gepackt, so dass es im RequestHeader steht.

Nun muss ich es nur noch hinbekommen, den Counter in der "signature" Abfrage bei 0 starten zu lassen und pro call um 30 zu erhöhen. Das gleiche dann in der "NextURL) dann sollte es funtionieren.


Ich bekomme aber den counter nicht zum zählen.

@Synesty bezüglich des counters irgendwelche Tipps? Der muss ja im Prinzip irgendwie hier rein, wenn der Header tatsächlich mit jedem Call neu aufgerufen wird:


<#assign uri = "https://www.real.de/api/v1/ticket-messages/seller?limit=30&offset=xx">


VG

Enrico

Hallo Enrico,


so weit ich weiß kannst du über die setVariable Funktion von Synesty eine Variable Setzen.

In die könntest du dann beim Parsen immer den momentanen/nächsten Offset reinschreiben und per getVariable beim Header wieder abholen.

https://apps.synesty.com/transformy/de-de?action=showTemplateFunctionDocumentation#setVariable


Viele Grüße

Stefan Helme 

Ja genau, setVariable() und getVariable() sollte der Ansatz sein. Wenn es ums zählen geht, könnte auch incCounter() eine Möglichkeit sein. 

Wir schauen mal, dass wir in den nächsten Tagen mal ein paar mehr Beispiele ins Handbuch bekommen.


Beispiel:


host: 

https://demodata.synesty.com/example-json-orders.json?counter=${incCounter('myCounterInUrl')}


parsingTemplate:

<#assign row = target.addRow()>
<#list json as j >
 <#assign row = target.addRow()>
 ${addColumns(row, j)}
</#list>

${nextUrl(initialUrl?replace("counter=1","") + "counter=" + incCounter('myCounterInUrl',1) )}



requestHeaders:

counter=${incCounter('myCounterInRequestHeader',1)}




Führt zu folgenden Requests:


[GET https://demodata.synesty.com/example-json-orders.json?counter=1


RequestHeaders:
{counter=1}


,GET https://demodata.synesty.com/example-json-orders.json?counter=2

RequestHeaders:
{counter=2}




Also wenn ich das zum Probieren genau so nachbaue erhalte ich folgende Meldung:


Ein Parameter mit falschem Datentyp wurde an eine Funktion übergeben. (Root Causes: ClassCastException: com.asolida.delivor.core.domain.CounterVariable cannot be cast to java.lang.Number)



Gibts du den Counter irgendwo in eine Funktion rein? Wenn ja probier mal: 


countername.get()


bzw.


${countername.get()


Die Counter Variable hat die gleichen Funktionen wie die Zählvariablen in Flows (Datentyp COUNTER). Der Unterschied ist, dass die incCounter() Funktion im APICall implizit einen eigenen Counter definiert, ohne dass du dafür eine Zählvariable im Flow brauchst.  


Wir nehmen das auch mit in unsere Doku-Planung auf. 

Guten Morgen,


das war es dann wohl Ich ging davon aus, dass ich die Zählvariable brauche, deswegen habe ich diese erstellt.

Jetzt scheint es zu funktionieren, zumindest mal wie im Beispiel.


Danke!

So, nun die hoffentlich letzte Frage, sorry dass ich so nerven muss.


Ich habe das nun auf meinen Fall umgebaut und kann damit tatsächlich 2 calls machen und bekomme entsprechend Ergebnisse zurück.

Nach dem 2ten Call hört das ganze auf, ich denke weil hier:

${nextUrl(initialUrl?replace("offset=1","") + "offset=" + incCounter('myCounterInUrl',1) )}

nur "offset=1" ersetzen. mit welchem Ausdruck baue ich denn hier die Funktion ein, dass "offset=1" aus der URL bei den nächsten Calls auch hochgezählt wird. Denn es müsste ja weiterzählen zu "offset=2"...etc wenn ich den Befehl zum ersetzen gebe. Das passiert aber nicht, egal wie ich den Counter da einbaue.


VG

Enrico


Bist du in der Step-Vorschau? Da werden maximal 2 Calls gemacht. Probier mal, ob bei einer echten Flow-Ausführung mehr passiert. 

Ja, war ich - beim Ausführen macht er tatsächlich mehr. Und wie erhöhe ich nun die Zahl die er als nächstes machen muss. Wenn ich in den countern 30 eingeben, so dass er immer 30 hochzählt, dann bekomme ich wieder das problem dass er die Signatur nicht mehr nimmt. 

Hmm also vielleicht ist der Counter nicht so das richtige Mittel der Wahl und setVariable() / getVariable() vielleicht besser.


Der Ansatz mit setVariable() wäre, dass du initial einen <#if> Check machst, ob es deine Variable "offset" schon gibt und wenn nicht beginnst du bei offset=0 (oder so).


Hier mal ein Beispiel, womit du in der URL, im RequestBody und im RequestHeader konsistent das offset setzen kannst.


host:

https://demodata.synesty.com/example-json-orders.json?offset=<#if getVariable('offset')! == "">0<#else>${getVariable('offset')}</#if>



body:


<#assign row = target.addRow()>
<#list json as j >
 <#assign row = target.addRow()>
 ${addColumns(row, j)}
</#list>


${setVariable("offset", (callcounter + 1) * 30 )}
${nextUrl(initialUrl?replace("offset=0","") + "offset=" + getVariable('offset') )}


requestHeader:


offset=<#if getVariable('offset')! == "">0<#else>${getVariable('offset')}</#if>




Ergebnis sind calls wie diese:


[GET https://demodata.synesty.com/example-json-orders.json?offset=0

RequestHeaders:
{offset=0}



GET https://demodata.synesty.com/example-json-orders.json?offset=30

RequestHeaders:
{offset=30}


Ergänzung (evtl. für andere, die es noch nicht wissen):

Die hier verwendeten Variablen wie z.B. callcounter sieht man bei Klick auf den Plus-Button im requestBody sowie 




Anmelden um einen Kommentar zu veröffentlichen