如何使用Python中的API导出所有Janrain用户数据

时间:2016-07-19 07:00:21

标签: janrain

我正在尝试导出在我的网站中使用Janrain在Python中注册的所有用户。从Janrain文档中,看起来entity.find是获取数据的最佳调用。所以我输入以下代码:

get_user = api.call
                (
                "entity.find",
                type_name = "user",
                )

但是,代码只返回100行数据。我知道还有另一个名为max_results的字段,但最多可能需要10000条记录。

那么,如何在没有行限制的情况下使用api导出所有用户数据?

谢谢!

1 个答案:

答案 0 :(得分:2)

您必须批量导出数据。

如您所述,entity.find调用采用max_results参数。您可以尝试将其设置为较高的值,但在大多数情况下,记录数将超过有效负载限制和/或API超时限制,并且API调用将失败。

Janrain建议使用first_results和max_results参数逐步执行值集,例如,批量为1000:

first_result=0&max_results=1000
first_result=1000&max_results=1000
first_result=2000&max_results=1000

有效地检索大量实体

如果要检索记录组,则其他人可能会删除您已检索的其中一个组中的记录。因为entity.find从列表的开头计算每组记录,所以下一个组可能会错过填充已删除记录空间的记录。 要避免此类问题,请遵循以下最佳做法:

收集大量记录时: 给定n,返回的最大结果数(1000是一个好的起点; 10000是最大值),f,记录查询过滤器,使用参数:

- sort_on=["id"]
- max_results=n

然后:

1. Call entity.find with filter=f
2. Let x be the id of the last record in the result set
3. Call entity.find with filter=f and id > x
4. If the result set is not empty, go to step 2

这会导致快速搜索,不会丢失任何记录。如果您不想使用查询过滤器,请在步骤1中忽略调用中的过滤器参数,并使用filter = id> x在步骤3中。

注意:Janrain还建议在大多数用例中避免使用“show_total_count”参数,因为它会带来显着的性能损失。此外,如果系统是具有相对大量活动注册的实时生产系统,则与起始总数相比,在导出过程结束时,记录总数可能会有所不同。