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

时间:2016-01-05 13:29:47

标签: trello

我正在使用Trello的API来拉取电路板及其卡片。

我注意到我正在拉的其中一块电路板正在接近千卡,所以我想知道如何对结果进行分页?

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

api文档并没有多说,我尝试的API响应非常混乱:

  ?

/板/ XYZ /卡极限= 1&安培;之前= 2015年1月1日

在指定日期之后返回活动为的卡片。

  

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

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

2 个答案:

答案 0 :(得分:4)

你的评估是正确的。 之前参数在卡创建日期运行。因为我们使用标准的Mongo ID,所以您实际上可以从卡ID中获取卡创建日期。 (这是一个这样的工具:https://steveridout.github.io/mongo-object-time/

为方便起见,Trello还允许您将卡ID传递到之前之后的参数,我们将为您使用日期。通过大量卡片进行分页的推荐方法是重复相同的查询,并使用这些参数向前或向后移动。

答案 1 :(得分:3)

因此,由于API确实可以按照您的预期进行操作,所以我至少在此处记录了这一点。

我创建了一个包含卡ABC,...,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(限制:1).map {| c | [c.name,c.id]}

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

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

之前

在最后一张牌之前拿牌。

  

board.cards(限制:1,之前:' 56af534e768610ff67c781ce')。map {| c | [c.name,c.id]}

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

效果很好,LM之前。

之后

如果我们在最后一张牌之后拿到一张牌会发生什么,响应应该是空的,对吗?

  

board.cards(限制:1,之后:' 56af534e768610ff67c781ce')。map {| c | [c.name,c.id]}

=> [["M", "56af534e768610ff67c781ce"]]
嗯,什么?如果我拿到两张卡会怎么样?

  

board.cards(限制:2,之后:' 56af534e768610ff67c781ce')。map {| c | [c.name,c.id]}

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

这违背了任何逻辑。绝对不能从头到尾遍历列表,因为卡列表没有结束。

回到分页

在这种情况下,我们必须以相反的顺序查看卡片。只需指定limit即可,因为默认情况下我们会按相反顺序进行操作。 (总的来说,这对吗?)

  

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

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

不要让这些物品的顺序欺骗你!它仍然是它们在电路板中出现的顺序,它们不会在创建时排序。如果我在其列中移动M卡,使其正好在L之上,则API会以相反的顺序返回它们。

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

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

  

board.cards(限制:5,之前:' 56af533fc1775129aaa7028b')。map {| c | [c.name,c.id]}

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

太棒了,我们正在下一页,让我们来看看最后一页。

  

board.cards(限制:5,之前:' 56af53397bf672bb56c7c536')。map {| c | [c.name,c.id]}

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

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