我正尝试使用Airtable API从那里的数据中检索记录-具体来说,是列单元格中具有的URL列表。
我编写了一个函数get_airtable_records
,可以通过curl
进行API调用,并且可以正常工作-作为Json对象返回结果。具体来说,我是将URL推送到数组$article_urls
。
唯一的问题是,Airtable将结果返回限制为最多100条记录的“页数”,而我的数据包含的内容不止于此。该API接受参数maxRecords
和pageSize
,但更重要的参数pageSize
仍限制为100。
Airtable还会返回另一个Json值offset
,该值在这种情况下用于分页。 offset
是旨在用作输入参数(也称为offset
)的记录ID。 您可以使用它来表示随后的其他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
值。offset
值,该值应用于进行另一遍遍。offset
值,因为它将返回用尽结果的最后一页,因此无需重新开始。答案 0 :(得分:0)
主要感谢@anthony's answer to a similar question here,我似乎有一些有效的代码...
// Prepare Article URLs list as an array
$article_urls = array();
// Call Airtable records in pages of 100 max
do {
// Offset is either inherited from last page's results, or is nothing
$offset = $articles['offset'] ?: "";
// Make get request, store result in array
$articles = get_airtable_records($offset);
// 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);
}
}
} while(!empty($articles['offset'])); // If there's an offset value (ie. starting record of next page), do again
// Output URL list for check
echo '<pre>';
print_r($article_urls);
echo '</pre>';
解释似乎是:
使用do
while
循环。
首先,将offset
设置为从上一次运行继承的值,或者不设置任何值。
我的get_airtable_records
函数已经在API调用中限制了offset
的存在,以下操作将offset
查询字符串添加到下一个API调用的URL中如果有的话...
if (!empty($offset)) {
$q_offset = '&offset='.$offset;
}
我已经对此进行了测试,它从两页的$article_urls
数组中获得了全部137个结果。我没有用超过两页的结果进行测试。