¡Gracias @sam! Puedo ver (incluso desde la solicitud GET) que debería ser bastante intuitivo: cuando quiero obtener la página 2, agrego una opción adicional para la página. También veo que “options” es algo que puedo definir con la función discourse_api:
# frozen_string_literal: true
module DiscourseApi
module API
module Search
# Devuelve los resultados de búsqueda que coinciden con el término especificado.
#
# @param term [String] un término de búsqueda
# @param options [Hash] un conjunto personalizable de opciones
# @option options [String] :type_filter Devuelve resultados del tipo especificado.
# @return [Array] Devuelve los resultados como un array de Hashes.
def search(term, options = {})
raise ArgumentError.new("#{term} es obligatorio pero no se especificó") unless term
raise ArgumentError.new("#{term} es obligatorio pero no se especificó") unless !term.empty?
response = get('/search/query', options.merge(term: term))
response[:body]
end
end
end
end
Así que, probando esto, esperaría obtener resultados diferentes aquí para la página 1 y la 2. O mejor aún, hagamos un poco más de separación y usemos las páginas 1 y 3. La consulta es para todos los temas de Q&A:
query = category["name"] + " #" + category["slug"]
=> "Q&A #q-a"
Ahora, recuperemos las páginas 1 y 3 usando el cliente discourse_api:
topics1 = client.search(query, options={"page": "1"})
topics3 = client.search(query, options={"page": "3"})
Puedo examinar el primer tema de cada uno:
=> {"id"=>220, "title"=>"¿Por qué estoy superando la cuota?", "fancy_title"=>"¿Por qué estoy superando la cuota?", "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"=>"¿Por qué estoy superando la cuota?", "fancy_title"=>"¿Por qué estoy superando la cuota?", "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}
Son exactamente iguales, lo que creo que significa que la variable de página no está funcionando. Cuando inspecciono en las herramientas de desarrollo de Chrome, el punto se activa al hacer scroll hacia abajo (ya que los mensajes se cargan automáticamente en la ventana), y puedo confirmar que page=2 es el parámetro correcto:
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 mejor aún, simplemente mira la lista de parámetros:
Query String Parameters
q: Q&A #q-a
page: 2
Esto no es un envío de formulario, así que no veo ningún “Form Data” como en el ejemplo.