在 Ruby 中拆分和循环
split and loop in Ruby
我是 ruby 的新手,但我试图解决的问题有点合乎逻辑。
我得到的用户列表大约有 3000 个。
但是 api 支持响应限制为 250,而且它不支持分页或偏移。
所以我必须在一个循环中点击这个 api 这样每次我都会得到 250 条记录直到我达到 3000 条记录。
在每一轮中,我都会为它分配一些属性。
api 是获取用户列表的获取请求。
api url: {{baseUrl}}/accounts/:id/users?limit=250&offset=0&count=true
api says - offset is record based, not page based,
How can I requests for users such as: First call for 0 to 250 then 250 to 500 then 500 to 750 till we reach the max count.
为了概括这一点,我认为无论我得到多少,它都应该遍历所有并分配属性。
可能正在使用 Range#step
?
require 'uri'
require 'net/http'
(0..3000).step(250) do |offset|
uri = URI("#{base_url}/accounts/users?limit=250&offset=#{offset}")
res = Net::HTTP.get_response(uri)
puts res.body if res.is_a?(Net::HTTPSuccess)
end
或者可以这样 endless range
(0..).step(250) do |offset|
uri = URI("#{base_url}/accounts/users?limit=250&offset=#{offset}")
res = Net::HTTP.get_response(uri)
if res.is_a?(Net::HTTPSuccess)
puts res.body
else
break
end
end
你也可以在块中使用redo
来重复错误的请求
您可以使用 Numeric#step
枚举偏移序列 [0, 250, 500... 2750]
。然后,假设 get_stuff
returns 和 Array
,您可以使用 Enumerator#flat_map
:
拼接结果
stuff = 0.step(by:250, to:2999).flat_map do |offset|
get_stuff(offset, 250)
end
我是 ruby 的新手,但我试图解决的问题有点合乎逻辑。
我得到的用户列表大约有 3000 个。 但是 api 支持响应限制为 250,而且它不支持分页或偏移。 所以我必须在一个循环中点击这个 api 这样每次我都会得到 250 条记录直到我达到 3000 条记录。 在每一轮中,我都会为它分配一些属性。
api 是获取用户列表的获取请求。
api url: {{baseUrl}}/accounts/:id/users?limit=250&offset=0&count=true
api says - offset is record based, not page based,
How can I requests for users such as: First call for 0 to 250 then 250 to 500 then 500 to 750 till we reach the max count.
为了概括这一点,我认为无论我得到多少,它都应该遍历所有并分配属性。
可能正在使用 Range#step
?
require 'uri'
require 'net/http'
(0..3000).step(250) do |offset|
uri = URI("#{base_url}/accounts/users?limit=250&offset=#{offset}")
res = Net::HTTP.get_response(uri)
puts res.body if res.is_a?(Net::HTTPSuccess)
end
或者可以这样 endless range
(0..).step(250) do |offset|
uri = URI("#{base_url}/accounts/users?limit=250&offset=#{offset}")
res = Net::HTTP.get_response(uri)
if res.is_a?(Net::HTTPSuccess)
puts res.body
else
break
end
end
你也可以在块中使用redo
来重复错误的请求
您可以使用 Numeric#step
枚举偏移序列 [0, 250, 500... 2750]
。然后,假设 get_stuff
returns 和 Array
,您可以使用 Enumerator#flat_map
:
stuff = 0.step(by:250, to:2999).flat_map do |offset|
get_stuff(offset, 250)
end