nextUrl bei ApiCall

Hallo, ich muß die Pagination auslesen. Leider ist mir unklar, wie ich beim ApiCall-Step an den responseheader herankomme, denn in diesem wird der Zähler der gerade abgerufenen Seite sowie die Gesamtanzahl der Seiten übermittelt:


![image](upload://kIDjSuFPacH3qrdJhose8kOPUxG.png "image")

Gruß Micha

Hallo Micha,


an die Header Daten der Response kommt man im APICall Step leider noch nicht. Wir haben das als Feature Wunsch mit aufgenommen.


Als Workarround:

Eventuell kannst du dir den "x-pagination-page-count" Wert vorher über einen UrlDownload + TextHtmlWriter Step holen und anschließend im APICall Step prüfen ob callcounter < x-pagination-page-count ist.


![](upload://szMrzrCNjxJgJtEJJz0cy5G2Jze.png)


![](upload://7dgVapkxQSJZ17ymA4teuaCV6gO.png)


VG Torsten

Hallo, das klappt zunächst mal ganz gut. Nur im folgenden Spreadsheetmapper tauchen nur die Datensätze des ersten Calls auf. Nachdem ich nun ziemlich lange hin- und herprobiert habe, kam mir die Erleuchtung: Am Übergang der Response der ersten zur zweiten Seite geht die eckige Klammer der ersten Seite zu und die der zweiten auf:

![image](upload://g9WLctgy6qHZwM3Uxt807jm9BM2.png "image")


Man müßte also irgendwie erzwingen, daß im Fall von mehr als einer Seite das schließende ] der ersten und das öffnende [ der zweiten Seite rausfliegen. Aber wie?


Gruß Micha



Hallo Micha,


die Response Header Daten sind jetzt auch im parsingTemplate des API Call Steps als Map verfügbar. Du kannst im template z.B. über


<#assign total_pages = httpResponseHeader['x-pagination-page-count']! />


darauf zugreifen.


VG Torsten

Super, danke! Eine Anmerkung dazu: Ich hatte es ja jetzt gemacht, wie ihr empfohlen hattet, also erstmal mit einem vorgeschalteten UrlDownload-Step. Dabei hatte ich das Problem, daß der Wert für x-pagination nicht gefunden werden konnte - wie sich herausstellte, war die Schreibweise vom Server anders ("X-Pagination-Page-Count"), also immer große Anfangsbuchstaben. Habt ihr diese Möglichkeit mit einbezogen? Nicht daß man deshalb in einen Fehler läuft, wenn m,an das nun direkt im APICall-Step machen will.


Gruß Micha

Hallo, ich muß aus einem Spreadsheet alle Zeilen per Call abschicken. Die Variable, die immer übermittelt wird, ist die Spalte attr_id. Das Problerm ist, daß ich mehrere Seiten wg. der Pagination abrufen muß. Wie baue ich denn die nextUrl-Logik in meinen SpreadsheetUrlDownload-Step ein? Es gibt da ja kein ParsingTemplate. Ich habe es versucht, direkt in die host-Zeile einzutragen:


https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/${attr_id}/terms<#assign x = httpResponseHeader['X-WP-TotalPages']! /><#assign count = 1><#if count?number lt x?number>?page=count?number +1; rel="next"><#assign count = count+1></#if>


Das schlägt aber fehl, weil er offenbar x zu diesem Zeitpunkt noch nicht kennt.

Wenn ich das Ganze stattdessen mit ApiCall mache, kann ich das alles zwar im ParsingTemplate unterbringen, aber dann kann ich nicht über das Spreadsheet iterieren, sondern müßte statt ${attr_id} immer einen festen Wert übertragen. Irgendwie sitze ich voll zwischen den Stühlen.


Gruß Micha

Hallo Micha,


der SpreadsheetUrlDownload Step unterstützt kein Pagination. Wenn dann kann man es nur mit 2 SpreadsheetUrlDownload Steps lösen. Im ersten rufst du immer die erste Seite ( https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/${attr_id}/terms) für jede attr_id ab. Das Ergebnis kannst du dann parsen um die Anzahl seiten zu erhalten ("X-WP-TotalPages"). Daraus kannst du dir in einem Spreadsheetmapper in einer Spalte eine Komma separierte Liste mit allen Urls pro Attribut erzeugen, also z.B:



attr_id total_pages urls
1 3 https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/1/terms?page=1, https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/1/terms?page=2, https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/1/terms?page=3
2 2 https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/2/terms?page=1, https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/2/terms?page=2
... ... ...


Die Spalte urls kannst du dann mit dem SpreadSheetColumnValueSplit2Rows in einzelnen Zeilen auftrennen und anschließend mit einem weiteren SpreadsheetUrlDownload Step abrufen.



Mit dem ApiCall Step könnte es eventuell auch funktionieren. Das parsing template wird aber mit Sicherheit recht komplex.


VG Torsten


Hmm, erstmal danke für den Tip! Kannst Du mir allgemein sagen, wie man es auch mit dem ApiCall-Step hinbekommen könnte?


Gruß Micha

Auch bei Deiner Idee komme ich leider nicht weiter - wie soll ich das Ergebnis des ersten SUD-Steps denn parsen? Wenn ich danach einen TexthmtlWriter-Step einbaue und dort z.B. ins Template

${responseHeaders@SpreadsheetUrlDownload_90!}

schreibe, ist das Egebnis leer (Anm. der Einfachheit halber habe ich im SUD-Step die Variable ${attr_id} durch einen Wert ersetzt, nämlich 7. Da sehe ich in der Vorschau:

![image](upload://8kcgHwUxsAodA39vENV1BTz8q56.png "image")

**************************************************************************

Wenn ich "responseHeaders" weiter aufklappe, steht da:

**************************************************************************

Server:nginx Date:Thu, 26 Sep 2019 12:03:41 GMT Content-Type:application/json; charset=UTF-8 Transfer-Encoding:chunked Connection:keep-alive Vary:Accept-Encoding Set-Cookie:yith_wcwl_products=%5B%5D; expires=Thu, 26-Sep-2019 10:59:51 GMT; Max-Age=0; path=/ X-Robots-Tag:noindex X-Content-Type-Options:nosniff Access-Control-Expose-Headers:X-WP-Total, X-WP-TotalPages Access-Control-Allow-Headers:Authorization, Content-Type Expires:Wed, 11 Jan 1984 05:00:00 GMT Cache-Control:no-transform, no-cache, must-revalidate, max-age=0 X-WP-Total:473 X-WP-TotalPages:48 Link:<https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/7/terms?page=2>; rel="next" Allow:GET, POST X-Cache:HIT X-Cache-Type:NGINX X-Cache-Device-Type:responsive X-Content-Type-Options:nosniff X-XSS-Protection:1; mode=block Strict-Transport-Security:max-age=31536000


**************************************************************************

Wieso zeigt er mir aber nichts im TextHTMLWriter-Step an?


Hallo Micha,


du kannst im 1. SpreadsheetUrlDownload den outputMode "Fügt den Inhalt der Antwort zum Ausgabe Spreadsheet hinzu." auswählen


![](upload://jalGowCCGQR1kcimugcJAHotnfN.png)



In einem SpreadsheetMapper nach diesem Step kannst du den Output (requests) des SpreadsheetUrlDownloads als Quelle verwenden.

![](upload://zNIyDc2zZtDV40PXWbfbH7VhJ10.png)


Im Mapper kannst du dann die Total-Pages parsen:


${result['responseHeaders']?replace(".*X-WP-TotalPages:(\\d+).*","$1","rim")}


und dann die urls in einer Spalte erstellen:


<#list 1..result['total_pages']?trim?number as page>https://bx7xu0.myraidbox.de/wp-json/wc/v3/products/attributes/${source_attr_id}/terms?page=${page}<#sep>,</#list>



![](upload://v595YSFPtSVqAuAr8YSgDXuHnvV.png)