Grazie @sam! Posso vedere (anche dalla richiesta GET) che dovrebbe essere abbastanza intuitivo: quando voglio ottenere la pagina 2, aggiungo un’opzione aggiuntiva per la pagina. Posso anche vedere che “options” è qualcosa che posso definire con la funzione discourse_api:
# frozen_string_literal: true
module DiscourseApi
module API
module Search
# Restituisce i risultati della ricerca che corrispondono al termine specificato.
#
# @param term [String] un termine di ricerca
# @param options [Hash] Un insieme personalizzabile di opzioni
# @option options [String] :type_filter Restituisce risultati del tipo specificato.
# @return [Array] Restituisce i risultati come un array di Hash.
def search(term, options = {})
raise ArgumentError.new("#{term} è richiesto ma non specificato") unless term
raise ArgumentError.new("#{term} è richiesto ma non specificato") unless !term.empty?
response = get('/search/query', options.merge(term: term))
response[:body]
end
end
end
end
Quindi, provando questo, mi aspetterei di ottenere risultati diversi qui per la pagina 1 e la 2. Oppure, per dare un po’ più di separazione, proviamo con le pagine 1 e 3. La query è per tutti gli argomenti Q&A:
query = category["name"] + " #" + category["slug"]
=> "Q&A #q-a"
Ora recuperiamo le pagine 1 e 3 utilizzando il client discourse_api:
topics1 = client.search(query, options={"page": "1"})
topics3 = client.search(query, options={"page": "3"})
Posso esaminare il primo argomento per ciascuno:
=> {"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}
Sono esattamente gli stessi, il che penso significhi che la variabile page non funziona? Quando ispeziono con gli strumenti di sviluppo di Chrome, il punto viene attivato scorrendo verso il basso (poiché i post vengono caricati automaticamente nella finestra) e posso confermare che page=2 è il parametro corretto:
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
o, meglio ancora, basta guardare l’elenco dei parametri:
Query String Parameters
q: Q&A #q-a
page: 2
Non si tratta di un invio di modulo, quindi non vedo alcun “Form Data” come nell’esempio.