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?

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

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.)

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.

أنا أحاول فهم كيفية استخدام واجهة برمجة تطبيقات Discourse. في الروابط أدناه، أفترض أن term تشير إلى فترة أو مدة. وهذا مبني على erm=after:2016-01-01%20before:2017-01-01 وما إلى ذلك. لكنني غير متأكد مما تعنيه term=API. هل يمكن لأي شخص توضيح ذلك؟

في الواقع، هناك نقطتا نهاية للبحث يمكنك استهدافهما: /search.json?q= و /search/query?term=

كلمة term تعني ببساطة مصطلح البحث ولا تشير إلى الفترة أو المدة.

لفهم واجهة برمجة تطبيقات البحث، من الأفضل اتباع الرابط Reverse engineer the Discourse API وإجراء عمليات البحث التي تنوي تنفيذها عبر الواجهة، ثم مراقبة كيف تقوم واجهة المستخدم بإجراء نفس الطلبات إلى واجهة برمجة التطبيقات.

مرحبًا @blake،
شكرًا لك على الرد.

في الواقع، أود جلب محتوى الصفحة بالكامل (في حالتي، قائمة بالمواضيع في فئة معينة، انظر Obtaining a list of topics from a category). لا أريد التصفح صفحة تلو الأخرى إذا لم يكن ذلك ضروريًا. ولا أعتقد أن عكس الهندسة هنا سيعمل، لأن Discourse تقوم فقط بتوسيع الصفحة أثناء التمرير لأسفل. لا توجد خيار، حسب علمي، لعرض الصفحة بالكامل. هل توجد طريقة للقيام بذلك؟

لا توجد استدعاءات API واحدة تجلب جميع الموضوعات في التصنيف. سيتعين عليك إجراء استدعاءات API متعددة. والسبب في ذلك هو أن التصنيف قد يحتوي على أكثر من مليون موضوع، وقد يكون ذلك استعلامًا ضخمًا ويؤثر على أداء موقعك. عند عكس هندسة التمرير، يمكنك رؤية كيفية قيام واجهة مستخدم Discourse بإجراء استدعاءات API لجلب المزيد من الموضوعات، ويمكنك تكرار هذا السلوك في واجهة برمجة التطبيقات الخاصة بك.

اعتمادًا على ما تحاول تحقيقه، يمكنك أيضًا استخدام استعلام استكشاف البيانات للحصول على عدد الموضوعات في تصنيف معين، ثم إجراء استدعاء API لهذا الاستعلام المحفوظ.