nextUrl bei APICall Step

Haben Sie irgendwo ein Beispiel, wie man Funktion ${nextUrl('')} nutzen kann ?


Danke.

hier ist zwar beschrieben, dass ApiCall diese Funktionalität unterstützt, leider aber kein Beispiel:
http://docs.synesty.com/display/SSUD/Release+Notes+03-2016

wenn unterschiedliche Funktionen im Bereich ParsingTemplate hinzugefügt werden, kommt Fehlermeldung:
Error during preview in step: APICall (SAXParseException: Content is not allowed in prolog.)

Hallo,

sorry, die Documentation für die APICall nextUrl() Funktion versuchen wir schnellstmöglich nachzuliefern.


Geht es um XML oder JSON?



Hier nur in aller Kürze ein Beispiel, was die Anwendung verdeutlicht.

Die nextUrl() Funktion wird für Pagination benutzt, also das Weiterblättern und Aufrufen der nächsten Seite, so lange, bis das Ende der Ergebnisse erreicht ist.


Beispiel:

1. Call: http://api.myshop.com/getproducts

2. Call: http://api.myshop.com/getproducts?page=2

3. Call: http://api.myshop.com/getproducts?page=3

etc.


<#assign row = target.addRow()>
 
<#assign numRows = 0 />

 
<#list json as p>
 <#assign row = target.addRow()>
    ${addColumns(row, p['product'])}
    <#assign numRows = numRows + 1 />
</#list>
 
 
<#if (numRows > 0 && callcounter < callLimit)>
    <#assign offset = ((callcounter + 1) * 150)>
    ${nextUrl(initialUrl+"&offset="+offset)}
</#if>

Variablen: Folgende Variablen sind vom Step immer verfügbar

  • initialUrl - die initiale URL, also das was in host steht
  • callcounter - ein Zähler für die Anzahl calls, die schon gemacht wurden. startet bei 0
  • callLimit - entspricht der limit-Variable des APICall Steps und gibt die max. Anzahl auszuführender Calls an. Bitte beim Testen auf kleine Werte z.B. 5 setzen um zu vermeiden.


Angenommen die erste URL wäre http://api.myshop.com/getproducts , dann würde obiges Script zum Aufruf folgender URLs führen:


1. http://api.myshop.com/getproducts

2. http://api.myshop.com/getproducts&offset=150

3. http://api.myshop.com/getproducts&offset=300

4. http://api.myshop.com/getproducts&offset=450

etc.


In der Programmierung würde das vermutlich einer do-while Schleife entsprechen.

D.h. der APICall step versucht immer die von nextUrl() gesetzte URL aufzurufen. Wird nextUrl() nicht aufgerufen, dann wird auch kein weiterer Call gemacht. D.h. die Endbedingung ist hier:


<#if (numRows > 0 && callcounter < callLimit)>

D.h. es muss noch Produkte in der Response geben, und es dürfen nur max. 5-Calls gemacht werden.


Zur Fehlermeldung:


Die Fehlermeldung (SAXParseException: Content is not allowed in prolog.) kommt daher, dass die API auf der Gegenseite ungültiges XML zurückliefert. Mit den Variablen hat das nichts zu tun. Es kann natürlich sein, dass an nextUr() eine URL übergeben wird, die falsches XML oder eine Fehlerseite liefert... ist aber Spekulation, da wir den Code hier nicht sehen.

Wir haben die Dokumentation für den APICall Step jetzt begonnen.

Feedback ist immer willkommen.

1 Like