gpt4 book ai didi

trello - 如何对 Trello api 响应进行分页?

转载 作者:行者123 更新时间:2023-12-01 09:52:49 29 4
gpt4 key购买 nike

我正在使用 Trello 的 API 来提取电路板和卡片。

我注意到我正在拉的一块板目前接近千张牌,所以我想知道如何对结果进行分页?

我尝试使用 since属性并将最后一张卡片的更新时间输入其中,但之后我得到零结果,所以我一定做错了什么。

api 文档没有说太多,我尝试过的 API 响应非常困惑:

/boards/xyz/cards?limit=1&before=2015-1-1



返回事件在指定日期之后的卡片。

"dateLastActivity"=>"2015-02-03T17:51:23.253Z",



并且没有其他日期字段可用于继续分页。

最佳答案

因此,由于 API 确实无法像您期望的那样工作,因此我至少在此处记录了这一点。

我用卡片创建了一个测试板 A , B , C , ... , M所以我可以测试它。

首先,抓取所有卡片按预期工作。

api.find(:boards, '56af532ae7a74a5fcac32e66').cards.map { |c| [c.name, c.id] }


=> [
["A", "56af53367f15b163c0e345fd"],
["B", "56af533783d4fccc1cce3941"],
["C", "56af533831727db409451c9e"],
["D", "56af53397bf672bb56c7c536"],
["E", "56af5339f5e67cf6bcc7323b"],
["F", "56af533ac0aa02de54ab881a"],
["G", "56af533b212b095266ebb506"],
["H", "56af533e11992f20f375fca1"],
["I", "56af533fc1775129aaa7028b"],
["J", "56af5345f81227a7a1cc3a35"],
["K", "56af5345e36b3d3c45b16967"],
["L", "56af534d964b6c4aa93d4aca"],
["M", "56af534e768610ff67c781ce"]
]

注意:卡片的顺序不是按照创建时间,而是按照它们在棋盘上从左列到右列以及从上到下的出现顺序。

限制

好的,是时候开始分页了。我们只拿第一张牌,好吗?

board.cards(limit: 1).map { |c| [c.name, c.id] }


=> [["M", "56af534e768610ff67c781ce"]]

糟糕,API 返回最后一个元素。绝对出乎意料。让我们玩下一个之后/之前。



让我们在最后一张之前抢卡。

board.cards(limit: 1, before: '56af534e768610ff67c781ce').map { |c| [c.name, c.id] }


=> [["L", "56af534d964b6c4aa93d4aca"]]

效果很好, L之前 M .



如果我们在最后一张之后抓一张卡片会发生什么,响应应该是空的,对吧?

board.cards(limit: 1, after: '56af534e768610ff67c781ce').map { |c| [c.name, c.id] }


=> [["M", "56af534e768610ff67c781ce"]]

嗯,什么?如果我拿两张卡会怎样?

board.cards(limit: 2, after: '56af534e768610ff67c781ce').map { |c| [c.name, c.id] }


=> [
["L", "56af534d964b6c4aa93d4aca"],
["M", "56af534e768610ff67c781ce"]
]

这违背了任何逻辑。绝对不能从头到尾遍历这个列表,因为卡片列表是没有尽头的。

返回分页

在这种情况下,我们将不得不以相反的顺序浏览卡片。只需指定 limit有效,因为默认情况下我们以相反的顺序进行。 (这完全有道理,对吧?)

api.find(:boards, '56af532ae7a74a5fcac32e66').cards(limit: 5).map { |c| [c.name, c.id] }


=> [
["I", "56af533fc1775129aaa7028b"],
["J", "56af5345f81227a7a1cc3a35"],
["K", "56af5345e36b3d3c45b16967"],
["L", "56af534d964b6c4aa93d4aca"],
["M", "56af534e768610ff67c781ce"]
]

不要让这些项目的顺序欺骗你!它仍然是它们在面板中出现的顺序,它们不是按创建时间排序的。如果我搬家 M卡在其列中,使其正好位于 L ,API 将以相反的顺序返回它们。

现在的问题是,如何从列表中抓取旧卡?正如另一个答案所说,ID 是时间戳,因此我们只需按 ID 排序并选择最低的一个并继续分页。

注意:如果您速度很快,您可以在同一秒内创建多张卡片,因此 ID 的顺序可能不正确,因为它们只使用秒数,而不是微秒数。但这并不能阻止我们进行分页。

board.cards(limit: 5, before: '56af533fc1775129aaa7028b').map { |c| [c.name, c.id] }


=> [
["D", "56af53397bf672bb56c7c536"],
["E", "56af5339f5e67cf6bcc7323b"],
["F", "56af533ac0aa02de54ab881a"],
["G", "56af533b212b095266ebb506"],
["H", "56af533e11992f20f375fca1"]
]

太棒了,我们正在阅读下一页,让我们阅读最后一页。

board.cards(limit: 5, before: '56af53397bf672bb56c7c536').map { |c| [c.name, c.id] }


=> [
["A", "56af53367f15b163c0e345fd"],
["B", "56af533783d4fccc1cce3941"],
["C", "56af533831727db409451c9e"]
]

是的,所以最后一页包含的卡片少于限制,所以我们知道它是最后一页。天啊! (如果它等于页面大小,我们会发现下一个响应为空)

关于trello - 如何对 Trello api 响应进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612933/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com