繁体   English   中英

Notion API 分页(检索限制)

[英]Notion API Pagination (Retrieval Limitation)

最近,我在尝试使用 Notion 的 API 检索数据时遇到了一个问题。 数据包含 300 多个值,这是一个问题,因为 Notion 一次只能提取 100 个元素。 幸运的是,我可以通过利用 JSON 中的游标找到获得多个页面的解决方案。 但是,它可以让我累积三页的数据,但是一旦超过三页(300 个元素),它就会给我类似下面的内容。

{'errorId': '94d72e18-3501-4976-8c61-1c66177045d3',
 'name': 'PayloadTooLargeError',
 'message': 'Request body too large.'}

    

上面的错误信息是下面代码中循环结束时data_hidden的output。

 def next_page(data):
        readUrl = f"https://api.notion.com/v1/databases/{databaseId}/query"
        next_cur = data['next_cursor']
        try:
            while data['has_more']:
                data['start_cursor'] = next_cur
                data_hidden = json.dumps(data)
                # Gets the next 100 results
                data_hidden = requests.post(
                    readUrl, headers=headers, data=data_hidden).json()
                
                data["results"] += data_hidden["results"]
                next_cur = data_hidden['next_cursor']
                if next_cur is None:
                    break
        except:
            pass
        return data

我不太确定为什么会在 300 处发生这种情况。 经过无数次尝试和错误,我几乎确信 Notion 不会让您从数据库中获取超过 300 个值。 希望我错了,如果有任何想法或可能的解决方案,请告诉我。 另外,如果我错过了任何信息,请在下面发表评论。

您正在将所有数据作为data_hidden与您的请求一起发送,最值得注意的是所有已经找到的结果(因为data["results"]正在获取所有新结果并且data_hidden基本上是data )。 也许尝试指定某种过滤器,使其保持不变并分别累积结果。 根据额外的过滤或排序,您可以简单地在第一个请求之后发送{"start_cursor": next_cur}作为请求的data参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM