Struggling with pagination within search/query.json

I’m trying to grab the posts within a date interval from our discourse server using the API. I’m struggling quite a lot with pagination.

Firstly I tried using search.json but that limits us to 50 results:
https://meta.discourse.org/search.json?q=after:2016-01-01%20before:2017-01-01

I tried to use the paginated query instead (but page 2 and page 3 end up the same for some queries):
https://meta.discourse.org/search/query.json?term=after:2016-01-01%20before:2017-01-01
https://meta.discourse.org/search/query.json?term=after:2016-01-01%20before:2017-01-01?page=2
https://meta.discourse.org/search/query.json?term=after:2016-01-01%20before:2017-01-01?page=3

That’s odd because simpler queries appear to paginate correctly:
https://meta.discourse.org/search/query.json?term=API
https://meta.discourse.org/search/query.json?term=API?page=2
https://meta.discourse.org/search/query.json?term=API?page=3
https://meta.discourse.org/search/query.json?term=API?page=51 (more_pages becomes null here, although we can fetch higher pages)

Is is possible to combine advanced search and pagination?

1 „Gefällt mir“

Second (3rd, 4th, etc.,) query string should look like below. & symbol instead of ?

https://meta.discourse.org/search/query.json?term=after:2016-01-01%20before:2017-01-01&page=2
https://meta.discourse.org/search/query.json?term=API&page=2

not like this

https://meta.discourse.org/search/query.json?term=after:2016-01-01%20before:2017-01-01?page=2
https://meta.discourse.org/search/query.json?term=API?page=2

3 „Gefällt mir“

I don’t know if it’ll help, but I wrote a little ruby program that will download all of a topic or category. (It doesn’t pay attention to dates, though.)

4 „Gefällt mir“

Oops. Getting the links wrong is what made me believe discourse support pagination using page=X in the first place (my own bad conversion from curl to a web browser).

Perhaps I should have ask a more general question: If search/query.json has a grouped_search_result with more_posts set true, how do I get to see the additional posts?

I know this is quite late, but yes we certainly support pagination now, search for something with lots of results and then use:

How to reverse engineer the Discourse API

To find all the endpoints.

3 „Gefällt mir“

Ich versuche zu verstehen, wie die Discourse-API verwendet wird.
Bei den folgenden URLs vermute ich, dass sich term auf einen Zeitraum oder eine Dauer bezieht. Das ergibt sich aus term=after:2016-01-01%20before:2017-01-01 usw. Mir ist jedoch unklar, was term=API bedeutet. Kann das jemand erläutern?

Es gibt tatsächlich zwei Suchendpunkte, die Sie aufrufen können: /search.json?q= und /search/query?term=.

term bedeutet einfach Suchbegriff und bezieht sich nicht auf einen Zeitraum oder eine Dauer.

Um die Such-API zu verstehen, empfiehlt es sich, Reverse engineer the Discourse API zu verfolgen und die Suchanfragen, die Sie über die API durchführen möchten, auszuführen, um zu sehen, wie die Benutzeroberfläche dieselben API-Anfragen stellt.

1 „Gefällt mir“

Hallo @blake,
vielen Dank für deine Antwort.

Eigentlich möchte ich den gesamten Inhalt einer Seite abrufen (in meinem Fall eine Liste von Themen in einer Kategorie, siehe Obtaining a list of topics from a category). Ich möchte nicht Seite für Seite gehen, wenn es nicht notwendig ist. Und ich glaube nicht, dass Reverse Engineering hier funktionieren würde, da Discourse die Seite einfach erweitert, während man nach unten scrollt. Mir ist keine Option bekannt, die die gesamte Seite auf einmal anzeigt. Gibt es eine Möglichkeit, das zu tun?

Es gibt keinen einzelnen API-Aufruf, der ALLE Themen einer Kategorie abrufen kann. Sie müssen mehrere API-Aufrufe tätigen. Der Grund dafür ist, dass eine Kategorie über 1 Million Themen enthalten kann, was eine enorme Abfrage darstellt und die Leistung Ihrer Website beeinträchtigen könnte. Wenn Sie das Scrollen reverse-engineeren, können Sie sehen, wie die Discourse-Benutzeroberfläche API-Aufrufe für weitere Themen durchführt, und Sie können dieses Verhalten in Ihrer API nachbilden.

Je nachdem, was Sie erreichen möchten, können Sie auch die Data-Explore-Abfrage verwenden, um die Anzahl der Themen in einer Kategorie zu ermitteln, und einen API-Aufruf an diese gespeicherte Abfrage tätigen.

3 „Gefällt mir“