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 « J'aime »

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 « J'aime »

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 « J'aime »

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 « J'aime »

J’essaie de comprendre comment utiliser l’API Discourse.
Dans les URL ci-dessous, je suppose que term fait référence à une période ou une durée. C’est basé sur erm=after:2016-01-01%20before:2017-01-01 etc. Mais je ne suis pas clair sur ce que signifie term=API. Quelqu’un peut-il clarifier cela ?

Il existe en réalité deux points de terminaison de recherche que vous pouvez interroger : /search.json?q= et /search/query?term=.

term désigne simplement le terme de recherche et ne fait pas référence à une période ou à une durée.

Pour bien comprendre l’API de recherche, il est préférable de suivre Reverse engineer the Discourse API et d’effectuer les recherches que vous envisagez via l’API, afin d’observer comment l’interface utilisateur effectue les mêmes requêtes API.

1 « J'aime »

Bonjour @blake,
Merci pour votre réponse.

En réalité, je souhaite récupérer l’intégralité du contenu d’une page (dans mon cas, une liste de sujets d’une catégorie, voir Obtaining a list of topics from a category). Je ne veux pas parcourir les pages une par une si ce n’est pas nécessaire. De plus, je ne pense pas que la rétro-ingénierie fonctionnerait ici, car Discourse charge simplement la page au fur et à mesure que vous faites défiler vers le bas. À ma connaissance, il n’existe aucune option pour afficher la page entière. Existe-t-il une méthode pour le faire ?

Il n’existe aucun appel API unique permettant de récupérer TOUS les sujets d’une catégorie. Vous devrez effectuer plusieurs appels API. Cela s’explique par le fait qu’une catégorie peut contenir plus d’un million de sujets, ce qui représenterait une requête massive susceptible d’affecter les performances de votre site. En analysant le mécanisme de défilement, vous pourrez observer comment l’interface utilisateur de Discourse effectue des appels API pour récupérer davantage de sujets, et vous pourrez reproduire ce comportement dans votre API.

Selon ce que vous cherchez à accomplir, vous pouvez également utiliser la requête Explore de données pour obtenir le nombre de sujets dans une catégorie, puis effectuer un appel API vers cette requête enregistrée.

3 « J'aime »