我正在尝试使用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
值,应该用它来进行另一次调用。
- 最后一次调用将不会生成offset
值,因为它已经返回了最后一页耗尽的结果,没有必要重新开始。