【发布时间】:2019-03-08 03:16:26
【问题描述】:
我正在尝试从 Intercom 获取所有公司列表。对于per_page,它一次不会超过 60 个。还有另一个端点
https://api.intercom.io/companies/scroll,这得到scroll_param 得到其他公司等等。
滚动参数随第一个请求一起提供,然后您可以使用它,直到公司变为[]。
我已经创建了这个方法
defp companies(scroll_param) do
url = if scroll_param, do: "#{@intercom_url}/companies/scroll?scroll_param=#{scroll_param}", else: "#{@intercom_url}/companies/scroll"
headers = ["Authorization": "Bearer #{@intercom_token}", "Accept": "Accept:application/json"]
response = HTTPoison.get(url, headers) |> elem(1)
case response.status_code do
200 -> {:ok, response}
_ -> {:error, response}
end
end
我正在尝试这样做
companies = companies(nil)
scroll_param = companies["scroll_param"]
all_companies =
Enum.reduce(companies["companies"], [], fn company, acc ->
if companies["companies"] == [] || is_nil(companies["companies"]) do
{:halt, acc}
else
acc ++ company["companies"]
end
end)
首先,获取所有具有 nil scroll_param 的公司,然后执行 Enum.reduce 直到公司变为 []。
当没有公司可以显示时,请求给出
%{"type":"company.list","companies":[],"scroll_param":"b85a7745-d423-49bf-91b2-72a513b781e4"}
我的问题是我不知道如何在这里使用递归,所以我可以让所有公司都以 all_companies 的形式加入变量中
第一个第一个请求给出这样的值
%{ "companies": [{ "type":"company",
"company_id":"smithbrothersltd.co.uk",
"id":"5c7817185170c3ed1cf9d07a",
"app_id":"f9c1fd60de50d31bcbc3f4d8d74c9c6dbc40e95a",
"name":"Smith Brothers",
"remote_created_at":1551374104,
"created_at":1551374104,
"updated_at":1551795637,
"last_request_at":1551795636,
"monthly_spend":0,
"session_count":3,
"user_count":6,
"tags":{"type":"tag.list","tags":[]},
"segments":{"type":"segment.list","segments":[{"type":"segment","id":"53834904c1bbf82df800b256"}]},"plan":{},"custom_attributes":{"creation_source":"api"}}
],
"scroll_param":"b85a7745-d423-49bf-91b2-72a513b781e4"
}
【问题讨论】:
标签: elixir