【发布时间】:2019-06-11 17:13:50
【问题描述】:
我正在尝试使用 Airtable API 从那里的数据中检索记录 - 具体来说,是我在列单元格中的 URL 列表。
我编写了一个函数get_airtable_records,通过curl 进行API 调用,它可以工作——将结果作为Json 对象返回。具体来说,我将 URL 推送到数组 $article_urls。
唯一的问题是,Airtable 将结果的返回限制为最多 100 条记录的“页面”,而我的数据包含的不止这些。 API 接受参数maxRecords 和pageSize,但更重要的参数pageSize 仍然上限为100。
Airtable 还返回另一个 Json 值,offset,在这种情况下用于分页。 offset 是一个记录 ID,旨在用作输入参数(也称为 offset)。 您可以使用它来表示后续附加 API 调用中的开始记录。我明白这一点。
我不明白的是如何修改我的代码以解决需要再次轮询 Airtable 的可能性。
换句话说,当没有offset 值时,我们应该始终从头开始运行。
然后,如果在返回的结果中存在 offset 值,我们应该再次检查 - 直到不存在 offset 值。
这就是我所拥有的。
// Make get request, store result in array
$articles = get_airtable_records($offset); // $offset won't exist at the start
// Prepare Article URLs list as an array
if (!isset($article_urls)) {
$article_urls = array();
}
// For each URL found in Airtable
foreach($articles['records'] as $record){
$url = $record['fields']['Published URL'];
// Add to our array list
if (!empty($url)) {
array_push($article_urls, $url);
}
}
// URL list after first pass:
echo '<pre>';
print_r($article_urls);
echo '</pre>';
// May hit a max of 100
// echo 'Offset: ' . $articles['offset'];
// Value like "itrJYSLx0RfslI80f/recEu6TiPTPCSDxg5" may exist.
// If so, go back to start, do get_airtable_records($offset) again and array_push
// Until, once more there is no "offset" value at end
我推测某种while 循环会很有用...?
有几件事是真的......
- 在第一次调用中,不需要传递原始
offset值,因为它从记录 0 开始。 - 但是那次和后续的传递可能会生成一个
offset值,应该使用它来进行另一次传递。 -
final 调用不会生成
offset值,因为它会返回耗尽结果的最后一页,无需重新开始。
【问题讨论】:
-
这是一个重复的帖子。 stackoverflow.com/questions/48998254/…
标签: php loops while-loop pagination offset