Discourses API get just the number of search results

Merci @sam ! Je vois (même à partir de la requête GET) que cela devrait être assez intuitif : lorsque je veux obtenir la page 2, j’ajoute une option supplémentaire pour la page. Je vois aussi que “options” est quelque chose que je peux définir avec la fonction discourse_api :

# frozen_string_literal: true
module DiscourseApi
  module API
    module Search
      # Retourne les résultats de recherche correspondant au terme spécifié.
      #
      # @param term [String] un terme de recherche
      # @param options [Hash] un ensemble d'options personnalisables
      # @option options [String] :type_filter Retourne les résultats du type spécifié.
      # @return [Array] Retourne les résultats sous forme de tableau de Hash.
      def search(term, options = {})
        raise ArgumentError.new("#{term} est requis mais non spécifié") unless term
        raise ArgumentError.new("#{term} est requis mais non spécifié") unless !term.empty?

        response = get('/search/query', options.merge(term: term))
        response[:body]
      end
    end
  end
end

Donc, en essayant cela, je m’attendrais à obtenir des résultats différents pour la page 1 et la page 2. Ou pour mieux séparer, prenons les pages 1 et 3. La requête concerne tous les sujets Q&A :

 query = category["name"] + " #" + category["slug"]
=> "Q&A #q-a"

Maintenant, récupérons les pages 1 et 3 en utilisant le client discourse_api :

topics1 = client.search(query, options={"page": "1"})
topics3 = client.search(query, options={"page": "3"})

Je peux examiner le premier sujet pour chacun :

=> {"id"=>220, "title"=>"Pourquoi dépasse-je le quota ?", "fancy_title"=>"Pourquoi dépasse-je le quota ?", "slug"=>"pourquoi-depasse-je-le-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"=>"Pourquoi dépasse-je le quota ?", "fancy_title"=>"Pourquoi dépasse-je le quota ?", "slug"=>"pourquoi-depasse-je-le-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}

Ils sont exactement identiques, ce qui signifie, je pense, que la variable de page ne fonctionne pas ? Lorsque j’inspecte dans les outils de développement de Chrome, le point est déclenché en faisant défiler vers le bas (puisque les messages se chargent automatiquement dans la fenêtre), je peux confirmer que page=2 est le bon paramètre :

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

ou mieux, regardons simplement la liste des paramètres :

Query String Parameters
q: Q&A #q-a
page: 2

Il ne s’agit pas d’un envoi de formulaire, donc je ne vois aucun “Form Data” comme dans l’exemple.