惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
K
Kaspersky official blog
S
Schneier on Security
Latest news
Latest news
Cisco Talos Blog
Cisco Talos Blog
T
Threatpost
T
Tor Project blog
T
Tenable Blog
The Register - Security
The Register - Security
T
Threat Research - Cisco Blogs
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
H
Help Net Security
博客园_首页
I
Intezer
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Project Zero
Project Zero
Recorded Future
Recorded Future
C
Cybersecurity and Infrastructure Security Agency CISA
Vercel News
Vercel News
A
Arctic Wolf
P
Palo Alto Networks Blog
The Hacker News
The Hacker News
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
S
SegmentFault 最新的问题
Know Your Adversary
Know Your Adversary
P
Privacy & Cybersecurity Law Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
P
Privacy International News Feed
G
GRAHAM CLULEY
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
T
The Exploit Database - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Security Latest
Security Latest
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity
C
Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
AWS News Blog
AWS News Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
当 Python + Notion API,你就可以用「Notion 助手」轻松调试自己的小机器人 - 少数派
2021-08-06 · via 少数派

API 机器人测试页

前言

本潜水员记得最开始看到 Notion 即将发布 API 的新闻就是在少数派,后来又看到有大佬发了一篇用 API 辅助记账的 应用文章。很是兴奋,但苦于门槛较高一直在等方便一些的体验文章。

直到现在 API 功能已正式发布,但是仍没见新文,心痒难耐,索性直接研究了一下。踩了一些坑,同时深感测试之麻烦。要复制来去扒 ID,看报错内容,摸索对象类型,折腾下来不禁头大了半圈。

所以一气之下用 Python 撸了两个工具,顺便写上使用教程和心得,希望可以帮大家在测试 API 的时候惬意些。

本文前半部分比较繁琐,但是很推荐看完,可以参考目录跳转。

原计划用快捷指令完成这些功能,但是作者的设备目前都是 beta 版系统,快捷指令编辑的时候频出 bug 与 UI 错误。最后甚至用钟大的 JSBox 使快捷指令跳转执行 JavaScript 代码才可以成功添加记录。所以快捷指令版 Notion 助手要等正式版系统发布之后再更新了(或者有意帮忙的大佬也可以私信讨论)。

如果觉得 Python 门槛太高,可以多点赞,大家需求高的话我就封成 exe 文件再发出来(嘿嘿)。

简单介绍

拿个人最常用的吃药记录举例,最近在吃褪黑素和咖啡因片。那么我很想知道药效如何、多长时间起作用,就可以在记录时写入时间和净含量,再用 Notion 自动计算出经过的时间和服用量等数据。

复制于目前在用的表格(略有删减)

不得不说这种小公式使用起来真的是很舒服,而且日常使用比 Excel 更美观易读,但是需要每次吃药都打开 Notion 手动选择数据记录下来。当然可以使用模板自动填充大部分数据,但仍需要打开 Notion 才能操作,并且还需要选择日期。如果能用手机上的快捷指令一键添加就好了。

Notion API 当然就可以实现这个功能。首先我们需要创建一个机器人,然后将机器人添加到需要进行操作的页面中,很简单,大佬的帖子 写的很详细了。

但是后续的流程操作实在繁琐,以 Python 举例:(非常推荐看完下面正常方法再看辅助代码的使用教程,这样您就理解我了)

POST —— 提交数据给 Notion 的方式

如果想在某个表格里添加一项记录,你需要如下 POST 代码将数据提交给 Notion 以及一个格式正确的消息体(后面会说怎么制作)

# 在 Python 中使用 requests 模块的功能进行 GET 或 POST 操作
NotionData = requests.request(
    # POST 提交,GET 拉取
    "POST",
    # API 链接,不同操作类型的 API 链接不同,例如这个就是数据库 databases 的 API 链接
    "https://api.notion.com/v1/databases",
    # 读取消息体,消息体需要另行编辑,后文再说
    json = body,
    # 消息头,内有必要信息
    headers={
        # 设置机器人令牌,即 Notion 的机器人码
        "Authorization": "secret_kWWY0dlOI7E0nRSZbNmvxADpgFjtOD876J4W0HBn5bj", 
        # 设置 Notion 版本,目前不用改
        "Notion-Version": "2021-05-13"
        },
    )

消息体的格式与所需数据

好的,在上面的步骤中,你要根据需求自行更改三项内容:API 链接、消息体、机器人令牌。其中API 链接和机器人令牌都是易得的,消息体怎么做呢?这就比较麻烦了,看下面代码:

# 消息体的变量 body,你还记得他吗?上面的代码里就引用了它~
body = {
    # 父级信息(即你要创建的页面的上一级页面)
    "parent": {
        # 父级页面类型,如果我们想在服药记录的数据库中增加一条记录,那么新纪录是什么类型呢?
        # 答对了!是页面类型,我们创建的是记录,它展开后是一条页面,所以输入 page_id
        "type": "page_id", 
        # 注意,下面的 "page_id" 项仍需要根据你的创建项目类型变化
                # 所需要提供的 ID 就是父级页面的 ID,需要手动在链接中进行复制
                "page_id": "bbae1170539f40fea03d0d07eb5a8b60"
        },
    # 属性项,在这里决定新记录的属性是什么,这里我用服药记录举例
    "properties":{
        # 真正的属性项里有更多参数,但是很多参数都可以被忽略,Notion 会自动补全
        # 此处已经由作者处理完毕,目前有自动处理代码正在编写当中
        "数量": {
            "select": {
                "name": "2"
                }}, 
        "药名": {
            "select": {
                "name": "咖啡因片"
                }}, 
        "单份含量": {
            "select": {
                "name": "200mg"
                }}, 
        "服药日期": {
            "date": {
                # 日期可以用其他函数自动填写
                "start": "2021-08-03T05:32:00.000+08:00"}}}
    }

GET —— 让我们从 Notion 中拉取数据吧!

很好,在这部分代码中,我们需要补充:父级页面类型、父级页面 ID、编写不同的属性项

那这些神奇的数据我们需要如何获取呢?请看下面的 GET 代码,我们将用它从 Notion 上拉取页面信息~

首先我们要先在数据库中创建一条记录,然后将它的数据拉取,就可以得到最全面的数据及属性项格式了。

# 通过 Notion API 拉取数据
NotionData = requests.request(
    # POST 提交,GET 拉取
    "GET",
    # API 链接,不同操作类型的 API 链接不同
    # 在前文由于我们要创建的是数据库中的记录即页面,因此在这里我们拉取的也是页面类型 pages
    # 后面需要指明所拉取的页面 ID
    "https://api.notion.com/v1/pages/532b676181db4c13b43e1203cc69e693",
    # 前文已介绍过
    headers={
        "Authorization": "secret_kWWY0dlOI7E0nRSZbNmvxADpgFjtOD876J4W0HBn5bj", 
        "Notion-Version": "2021-05-13"
        },
    )
# 一切顺利的话,我们将拉取如下数据
# {"object":"page","id":"532b6761-81db-4c13-b43e-1203cc69e693","created_time":"2021-08-05T06:56:00.000Z","last_edited_time":"2021-08-05T10:43:00.000Z","parent":{"type":"database_id","database_id":"bbae1170-539f-40fe-a03d-0d07eb5a8b60"},"archived":false,"properties":{"数量":{"id":">dRE","type":"select","select":{"id":"03be4654-3ae8-4a71-bc3e-5d8d0f24456c","name":"4","color":"pink"}},"类别":{"id":"D`Yd","type":"select","select":{"id":"620209f6-fa99-4944-8797-5b44c9e3015d","name":"咖啡因片","color":"brown"}},"hours":{"id":"OFoK","type":"formula","formula":{"type":"string","string":"62"}},"单份含量":{"id":"TIc^","type":"select","select":{"id":"4b10b0a8-7d6e-4ff3-8cbf-737596504795","name":"200mg","color":"brown"}},"褪黑素数量":{"id":"W;[>","type":"formula","formula":{"type":"number","number":0}},"服药日期":{"id":"iahF","type":"date","date":{"start":"2021-08-03T05:32:00.000+08:00","end":null}},"minutes":{"id":"jUE[","type":"formula","formula":{"type":"string","string":"3757"}},"days":{"id":"msql","type":"formula","formula":{"type":"string","string":"2"}},"摄入量":{"id":"nyGz","type":"formula","formula":{"type":"string","string":"800mg"}},"已过时间":{"id":"v{wq","type":"formula","formula":{"type":"string","string":"已过 2 天 14 小时"}},"喝咖啡数量":{"id":"{Ah>","type":"formula","formula":{"type":"number","number":4}},"记录名":{"id":"title","type":"title","title":[]}},"url":"https://www.notion.so/532b676181db4c13b43e1203cc69e693"}

我们可以将数据复制到 JSON 在线解析网站 中,可以得到如下视图。

可以发现右侧还有很多 id、type 等属性项,这些都可以后期去掉,只留下前文消息体那样的格式即可。同时右侧也展示了父级页面的类型和 ID,好方便啊(no)。

消息体真的很多字

好啦!然后我们写好消息体,再从此处向前文回溯到 POST 提交数据,即可完成仅这个表格的仅一类记录的提交测试流程。

代码功能及介绍

好的,让我们休息一下。不要再想前面的流程了,现在可以用更简单的方法完成上述操作。

本模块主要简略的展示代码功能和操作方式,具体的实现思路以后有机会再更新。

简单的前置条件

需要安装 Python ,真的不难,可以参考该安装教程

再安装 requests 模块以便进行 GET 和 POST 操作,只需要在终端中输入 'pip install requests' 即可。

作者在使用 VS Code 搓代码与运行,如果你只安装了 Python 怎么办呢?可以右键 .py 文件选择 'edit with IDLE' 后打开。然后根据下文内容修改关键变量后点击上方 “Run” 即可运行。

如果这个也有点难,那你可以选择等待鸽子作者可能会推出的 exe 版 Notion 助手(但是不可能有 UI)。

原始 IDLE
运行结果都一样

GET 代码功能及使用介绍

  • 直接粘贴待测试页面的链接即可,不需要扒 ID
  • 选择待测试页面类型更方便
  • 自定义参数的修改流程及位置集中化
  • 直接输出当前页面类型、父级页面类型、父级页面 ID
  • 可更直观的输出不同类型的报错提示

我们只需要把待检测链接粘贴进来,然后选择好复制该页面链接时的页面类型,再将机器人令牌粘贴过来就可以点击运行。

简单定义参数

上图为自定义参数的修改处,可以仅靠修改数字改变待测 ID,省时省力。

成功检测后的输出内容

粘贴链接后,选择测试类型运行后的输出结果,直接告诉用户页面类型和 ID,省时省力。

输出报错

修改待测 ID 后输出的报错,省时省力。

这样就极大地减少了工作量,并且可以直接复制父级 ID 给 POST 界面。

POST 代码功能及使用介绍

  • 直接粘贴父级页面 ID 即可
  • 更方便的选择操作类型及父页面类型
  • 和 GET 代码一样可以方便的自定义参数
  • 不需要编辑消息体中的 parent 父级信息(属性项仍需要编辑)
  • 页面创建成功后提供直达链接
  • 可更直观的输出不同类型的报错提示
同上编辑参数

和 GET 代码一样,轻松选择类型~

成功运行的输出结果

添加成功~

输出直达链接更方便我们找到新增的页面。

修改机器人令牌后的报错
制作消息体成为了唯一麻烦的步骤

测试一下吧!

本文最早就是 在 Notion 上完成 的,同时也预备了一个 测试页面 给各位。

里面有两个表格,第一个表格的内容已经内置在代码中了,直接点击即可添加一条记录。第二个表格则需要大家修改一下属性项以及其他参数,供练手用,各位加油。

代码下载地址:Notion 助手(阿里云盘)

部分细节与 todo list

下面是几个可能有人想修改或解封的模块,作者在 Python 方面实属菜鸡,有些模块感觉还可以更简单。注释已经尽量写得详细了。

原计划当做练习作业尽量写写实现思路,但是字儿太多,以后更新新模块后发一篇吧。

GET 代码文件中被封存的 Block 类型

这个类型已被封存,因为我觉得这个功能不太常用,而且通过 API 添加新 block 记录也未免太过麻烦,直接去掉注释的用处也不是很大,有这个需求可以留个评论讨论一下。

GET 代码文件中输出信息及报错的模块(POST 代码文件中同理)

如果发现了新的错误代码或其他提示信息,可以在 「# 报错消息对照表」里添加错误代码及修改信息文本。

彩蛋:简易消息体制作助手

左:原始数据,右:代码自动处理后的数据
在这里还抓到了父级字典

目前输出的属性项已可以直接使用了,目前的小目标就是可以直接将父级页面信息与属性项拼接制作成一个消息体,我们只需要修改关键数值即可完成一份消息体的创建。

做到了这一步其实就可以将 GET 中获得的父级信息和属性项直接通过此代码制作成消息体,再打包成一个 POST 文件输出供人修改。

但是作者比较懒,随缘更新吧~