📢 这篇文章已经失去了时效性。NotionPlus 自 V2.0.0 起,不再兼容下面文档中提到的功能。详情见 Untitled
简介
我自己维护了一张书单表格,每次添加新书籍时,我都要去搜索书籍封面下载,然后上传到表格中。这样重复的操作让我厌烦,于是便有了这个项目。
NotionPlus 是一个 Chrome 扩展。安装此扩展之后,你可以通过编程操作 Notion Database 中的数据。在一些需要重复操作的地方,编写任务代码,能极大地提高工作效率。
此扩展支持使用 Python 和 JavaScript 编写任务代码。使用 Python
编写任务代码需要配置服务端。使用 JavaScript
编写任务代码,则无需配置服务端。
如何运作
快速上手
安装浏览器扩展
https://chrome.google.com/webstore/detail/notionplus/mlmicgheiiebfodpmpgcekbhkeipeald
快速体验
安装浏览器扩展后,F12 打开浏览器控制台,刷新页面(保证扩展加载成功)
NontionPlus has been activated 🎉
看到上述字样后,则表明扩展已经加载成功。如下图所示,点击 top 切换到 NotionPlus 扩展。
然后便可以在控制台中访问 nb
(notabse 实例) 变量。通过 nb 便可以操作 Notion 中的数据了
具体操作可以参见下面这个演示视频
查看 Notabase 文档了解更多
https://gine.me/posts/fdf29d789de24d6197fc5d76310c0da6
配置任务表格
你可以在控制台中,使用 JS 处理一些一次性的任务。如果你的任务是重复的、通用的,你可以编写一些可复用的任务代码。
我们需要一个表格来存储任务代码,复制这个页面到自己的 Notion 中,得到一个任务表格模板。
https://www.notion.so/gine/c7baaf9e081749d0b72d59e4c34541bb?v=c2886c5f38d241cbbce6a30ad147ee56
此表格中包含了一些使用案例和更加详细的使用说明。打开 NotionPlus 选项,配置任务表格地址。
在 actionTableUrl 处填上刚才拷贝的表格地址(自己 Notion 中)
编写任务
NotionPlus 使用默认的 Name 列作任务名称。回到刚才的任务表格,新建一条记录,为任务命名。
然后添加一个代码块,可选语言是 JavaScript
或者 Python
。NotionPlus 会根据代码块的语言,来确定执行方案。
触发任务
在需要触发任务的表格中,新建一列 checkbox,命名为 #任务名称
。
如果执行上图中的的任务。当我们点击 checkbox (图中绿色区域)时,会触发任务表格中名为change_name
的任务,被点击行的 name 字段就会变成 change from js client。
部署后端服务 (可选项)
💡 只有使用 Python 编写任务代码才需要部署服务端。此处不再推荐使用 Python 编写任务代码。除非 JS 无法满足你的需求,例如批量上传文件等应用场景。个人精力有限,目前我仅维护 JS 客户端的实现,当然也欢迎 PR 其它语言的服务端实现。
clone 代码
git clone https://github.com/mayneyao/NotionPlus.git
安装依赖
pipenv install
配置
cp config.sample.ini config.ini
# 修改 config.ini 文件中的配置
参数说明
notion
- token
- 打开 notion 任意页面,保证你已经登录。
- 打开浏览器调试工具,在 cookies 中获取
token_v2
action_table_url用于动态任务的 action 表格地址(浏览器可访问地址)例如 :https://www.notion.so/gine/80923841527a495c84aa5884f0960dfc?v=426da6c4388749a3b85a49bad1941b1a
- timezone
- 默认填写 Asia/Shanghai 即可
security
- auth_token
- 自己瞎想一个别人猜不到的密码,保证通信安全。
运行
./run.sh
默认运行在 5000 端口
配置扩展
点击浏览器上的 NotionPlus 扩展图标,打开选项页配置服务器参数,配置完成后保存。
- 本地运行时服务器接口默认填写
http://127.0.0.1:5000
- 安全码就是上面你在 服务端配置的见不得人的 auth_token
- ⚠️ 当服务端部署在远程服务器上时,需要上 https
深入使用
当你使用 Python 编写任务代码时,任务在服务器端执行。如何使用 Python 编写任务代码,你应该参考 notion-py 的使用文档。
https://github.com/jamalex/notion-py
当你使用 JS 编写任务代码时,任务在浏览器客户端执行。如何使用 JS 编写任务代码,你应该参考 notabase 的使用文档。
https://github.com/mayneyao/notabase
你可以在任务代码中使用,下表中的内置对象和方法。
注意事项
-
使用 JS 编写任务代码时,属性名大小写敏感。Python 任务代码中对属性名大小写不敏感。
-
在 JS 任务代码中使用 await 。请用如下方式
(async ()=>{ let data = await fetch("some where") })()
使用案例
参见模板表格中的使用案例
https://www.notion.so/gine/c7baaf9e081749d0b72d59e4c34541bb?v=c2886c5f38d241cbbce6a30ad147ee56