使用httparty ruby​​gem发出api请求时如何处理分页

时间:2019-06-04 18:44:24

标签: json ruby get jekyll httparty

我正在尝试为我的Jekyll网站编写一个插件,该插件将排序后的JSON响应写入数据文件,但是我在处理响应中的项目限制时遇到了麻烦。基本响应如下:

{
  "current_page": 1,
  "per_page": 50,
  "total_pages": 19,
  "url": "https://web.consonance.app/api/v2/products.json",
  "products": [
    {
      ...
      "pub_date": "2017-05-01"
      ...
    },
    ...
  ]
}

其中products是一本书的数组,我想按它们的出版日期进行排序(pub_date)。没有next_page网址,只有current_pagetotal_pages。我的插件非常基础。它使用httparty发出API请求,然后使用pub_date将响应作为哈希排序。到目前为止,它看起来像这样:

require 'rubygems'
require 'httparty'
require 'json'

# http request to api

url = 'https://web.consonance.app/api/v2/products.json'
query = {
}
headers = {
  Authorization: "Token token=**************"
}
response = HTTParty.get(url, query: query, headers: headers)

# convert response to hash array

hash = JSON.parse(response.body)

# reverse sort product in products by date published

hash_sorted = hash['products'].sort_by! { |o| o['pub_date'] }.reverse!

# open _data file and write json response

File.open("./_data/products.json", "w") { |file| 
  file.puts JSON.pretty_generate(hash_sorted)
}

这给了我一个由pub_date反向排序的前50个项目的JSON响应。我的问题是:

  

如何从整个数组中获取最近出版的书(product),而不仅是前50条结果?

我尝试将每页的限制增加到最大,即500项,但是书的总页数超过一页,因此仍然存在分页问题。

该请求的可用参数记录在here中。

NB –我使用httparty是因为我发现发出请求很容易,但是我愿意使用其他gem / method。我才刚刚开始学习Ruby,所以请多多包涵。

1 个答案:

答案 0 :(得分:0)

使用current_pagetotal_pages作为条件,我遍历了响应的页面,并将所有乘积分配给一个数组:

while current_page <= total_pages do

  url = 'https://web.consonance.app/api/v2/products.json'
  query = {
    'page' => "#{current_page}",
  }
  request = HTTParty.get(url, query: query)

  hash = JSON.parse(request.body)

  hash['products'].each do |item|
    product_array.push(item)
  end

  current_page += 1

end