Thanks @sam! I can see (even from the GET request) that it should be fairly intuitive - when I want to get page 2, I add an additional option for page. I can also see that “options” is something I can define with the discourse_api function:
# frozen_string_literal: true
module DiscourseApi
module API
module Search
# Returns search results that match the specified term.
#
# @param term [String] a search term
# @param options [Hash] A customizable set of options
# @option options [String] :type_filter Returns results of the specified type.
# @return [Array] Return results as an array of Hashes.
def search(term, options = {})
raise ArgumentError.new("#{term} is required but not specified") unless term
raise ArgumentError.new("#{term} is required but not specified") unless !term.empty?
response = get('/search/query', options.merge(term: term))
response[:body]
end
end
end
end
So - trying this out, I would expect to get different results here for page 1 and 2. Or let’s give a little more separation and do pages 1 and 3. The query is for all Q&A topics:
query = category["name"] + " #" + category["slug"]
=> "Q&A #q-a"
Now let’s retrieve pages 1, and 3 using the discourse_api client:
topics1 = client.search(query, options={"page": "1"})
topics3 = client.search(query, options={"page": "3"})
I can look at the first topic for each:
=> {"id"=>220, "title"=>"Why am I exceeding the quota?", "fancy_title"=>"Why am I exceeding the quota?", "slug"=>"why-am-i-exceeding-the-quota", "posts_count"=>3, "reply_count"=>0, "highest_post_number"=>3, "image_url"=>nil, "created_at"=>"2018-06-01T12:56:12.120Z", "last_posted_at"=>"2018-06-15T16:41:44.736Z", "bumped"=>true, "bumped_at"=>"2018-06-15T16:41:44.736Z", "unseen"=>false, "pinned"=>false, "unpinned"=>nil, "visible"=>true, "closed"=>false, "archived"=>false, "bookmarked"=>nil, "liked"=>nil, "tags"=>["storage", "quota"], "category_id"=>26, "has_accepted_answer"=>false}
irb(main):148:0> topics3['topics'][0]
=> {"id"=>220, "title"=>"Why am I exceeding the quota?", "fancy_title"=>"Why am I exceeding the quota?", "slug"=>"why-am-i-exceeding-the-quota", "posts_count"=>3, "reply_count"=>0, "highest_post_number"=>3, "image_url"=>nil, "created_at"=>"2018-06-01T12:56:12.120Z", "last_posted_at"=>"2018-06-15T16:41:44.736Z", "bumped"=>true, "bumped_at"=>"2018-06-15T16:41:44.736Z", "unseen"=>false, "pinned"=>false, "unpinned"=>nil, "visible"=>true, "closed"=>false, "archived"=>false, "bookmarked"=>nil, "liked"=>nil, "tags"=>["storage", "quota"], "category_id"=>26, "has_accepted_answer"=>false}
They are exactly the same, which I think means the page variable isn’t working? When I inspect in Chrome devtools, the point is triggered by scrolling down (since the posts auto-load in the window) I can confirm that page=2 is the correct parameter:
Request URL: https://ask.cyberinfrastructure.org/search?q=Q%26A%20%23q-a&page=2
Request Method: GET
Status Code: 200 (from ServiceWorker)
Referrer Policy: strict-origin-when-cross-origin
or better, just look at the parameters list:
Query String Parameters
q: Q&A #q-a
page: 2
This isn’t a form submit, so I don’t see any “Form Data” per the example.