【发布时间】:2019-10-20 07:44:25
【问题描述】:
我正在尝试为我的 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 url,只有current_page 和total_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。
注意 - 我使用 httparty 是因为我发现提出请求很容易,但我愿意使用其他 gem/方法。我才刚刚开始学习 Ruby,所以请多多包涵。
【问题讨论】:
-
分页算法非常简单......如果结果长度等于限制,则继续下一页。在您的情况下,这只是一个循环,您可以在其中增加 'current_page' 参数
-
^ aka
"https://demo.consonance.app/api/v2/products.json?page=2"您还可以提供page_size,这可能允许您提高退货的最大数量。更快地遍历页面,尽管可能是 50 是最大值。 -
500 是最大值,但仍然需要处理额外的页面。我会将它作为查询参数放入,但如果它会加快请求速度。
标签: json ruby get jekyll httparty