Daily Track with Shortcuts & Notion API

2022-08-22 Views 科技 | 效率1779字9 min read

最近为了开题的事而发愁,不仅找不到合适的文章,而且越找越发现自己不会合适的检索。但好在还有像《文献关系与信息分析》这样的MOOC,而且还请教了组里的师兄,一边学一边做,让自己不太干着急瞎焦虑。所以想着记录一下每天自己干了些啥,在Apple设备上用快捷指令结合Notion来实现这个小功能。

一开始在谷歌搜索,看的都是中文的资料,有些太过于细节冗长,根本不想看,有些又过于简单,该说的所以然根本没提及,最后还是在油管上找到了一个细节适中的视频,深得我心。

要记录的内容其实很简单,就是时间+今天做了啥,所以大致步骤如下:

  1. 创建Notion Integration
  2. 在Notion里新建一个Database
  3. 将Database和API机器人链接起来
  4. 创建相应的快捷指令

Step1_创建Notion Integration

Notion Integration 根据官网介绍是指通过Notion API将Jira,Google Drive和Slack等工具连接到Notion,以帮助增强工作流程。简单点说就是就是一个集成小工具,可以帮助修改Notion里的内容。

  1. 打开Notion Integration,点击“+ New intrgration”或者“+ Create new integration”
    image-20220822152627843

  2. 填写基本信息并提交即可

    image-20220822153257515
  3. 提交后跳转的页面里,请一定记住你的Token,最后

    image-20220822153719220

Step2_在Notion里新建一个Database

新建Database类型的界面并设置好相应的属性。

image-20220822155259655

Step3_将Database和Notion Integration链接起来

在Notion里创建好的Database界面,点击右上角的"Share"-->点击"Invite",然后看到"Select an integration"下方刚创建的Notion Integration并点击,就将两者链接好了。

image-20220822154114525

由于API的使用中需要填写数据库的ID,因此这里介绍两种获取数据库ID的方法——

  • 方法一

    • 在Notion Database的界面,同样点击"Share",然后打开"Share to web"的开关并复制该链接,比如我的数据库链接是这个样子:https://***.notion.site/811d7411d532466a95b96583cd01feb3?v=eb5262cdb5bb48efac0aafa4a836f8ad
    • 那么'?v='前面的那串数字字母就是这个数据库的ID
  • 方法二

    • 在网页浏览器中打开并登录notion,转到刚创建的Database的界面,复制浏览器中显示的网址,比如:https://www.notion.so/**/811d7411d532466a95b96583cd01feb3?v=eb5262cdb5bb48efac0aafa4a836f8ad
    • 同样地,也是'?v='前面的那串数字字母就是这个数据库的ID

Step4_创建相应的快捷指令

终于到了最后一步了。

  1. 打开快捷指令,点击「+」新建快捷指令
image-20220822160004511
  1. 添加「词典」,将token和数据库ID保存起来,设置成「变量」config
image-20220822160228200
  1. 「要求输入」(由于这里我只需要输入我今天干的啥,所以只有一个输入,大家根据自己的实际情况来哈)
image-20220822160336362
  1. 同时我还需要记录下日期,因此要获得当前「日期」;由于Notion支持的时间格式是ISO 8601,因此需要「格式化日期」
image-20220822160644531
  1. 由于是记录每天的事情,其实就是在数据库里添加一页,所以用到的是"Create a page",即在已有的数据库里新增数据。

    1. 根据Notion文档的描述,我们需要将数据发送给链接"https://api.notion.com/v1/pages",因此先将该「URL」存起来
    image-20220822161406650
    1. 「获取 URL 内容」,这里用到的是POST方法

      • 根据文档描述,头部有三个键值对,分别是"Authorization","Content-Type","Notion-Version",他们对应的值如下图所示。
    image-20220822161705734
     - 请求体为JSON格式(这一块应该是最容易搞晕的地方了)
         如果是文字类型的一定要像Name这个属性这样设置,就像Notes也是文本类型也是这样设置。
    
         Date属性相对简单。
    
         值得注意的是这些键的名字不要随意修改!
         ![image-20220822161926005](https://picgo4gridea.oss-cn-shanghai.aliyuncs.com/images/image-20220822161926005.png)
    
  • 设置好后即可大功告成!

Step5_测试

image-20220822162742113
image-20220822162814518

看到Notion里新增了刚刚添加的内容,就表示成功啦!

成功之后返回的内容

{"id":"4847b553-7f99-48b2-82fe-8e8428ca0666","created_time":"2022-08-22T03:52:00.000Z","last_edited_by":{"id":"ee0adea1-a632-4b8b-82a4-7780fcd1177e","object":"user"},"parent":{"type":"database_id","database_id":"e18d0e41-9447-4295-b40c-44480b26987f"},"created_by":{"id":"ee0adea1-a632-4b8b-82a4-7780fcd1177e","object":"user"},"url":"https:\/\/www.notion.so\/2022-08-22-4847b5537f9948b282fe8e8428ca0666","archived":false,"last_edited_time":"2022-08-22T03:52:00.000Z","object":"page","icon":null,"cover":null,"properties":{"Notes":{"id":"%7B%5DMS","type":"rich_text","rich_text":[{"annotations":{"code":false,"bold":false,"underline":false,"italic":false,"strikethrough":false,"color":"default"},"plain_text":"3","type":"text","href":null,"text":{"content":"3","link":null}}]},"Date":{"id":"uVPR","type":"date","date":{"start":"2022-08-22","end":null,"time_zone":null}},"Name":{"id":"title","type":"title","title":[{"annotations":{"code":false,"bold":false,"underline":false,"italic":false,"strikethrough":false,"color":"default"},"plain_text":"2022-08-22","type":"text","href":null,"text":{"content":"2022-08-22","link":null}}]}}}

其实在写这篇文章之前我的测试并非如此顺利,遇到过两个小问题,这里也简单记录一下。

  • 错误一

    • 返回
     {"status":400,"object":"error","code":"validation_error","message":"body failed validation. Fix one:\nbody.properties.Date.title should be defined, instead was `undefined`.\nbody.properties.Date.rich_text should be defined, instead was `undefined`.\nbody.properties.Date.number should be defined, instead was `undefined`.\nbody.properties.Date.url should be defined, instead was `undefined`.\nbody.properties.Date.select should be defined, instead was `undefined`.\nbody.properties.Date.multi_select should be defined, instead was `undefined`.\nbody.properties.Date.people should be defined, instead was `undefined`.\nbody.properties.Date.email should be defined, instead was `undefined`.\nbody.properties.Date.phone_number should be defined, instead was `undefined`.\nbody.properties.Date.date should be defined, instead was `undefined`.\nbody.properties.Date.checkbox should be defined, instead was `undefined`.\nbody.properties.Date.relation should be defined, instead was `undefined`.\nbody.properties.Date.files should be defined, instead was `undefined`.\nbody.properties.Notes.id should be defined, instead was `undefined`.\nbody.properties.Notes.name should be defined, instead was `undefined`.\nbody.properties.Notes.start should be defined, instead was `undefined`."}
    
    • 乍一看好多错误,不想看😣但仔细一看Date和Notes属性需要这么多东西吗,好奇怪

    • 这时候我的Notion-version还是"2021-05-13",最新的是"2022-02-22",于是我就修改成了最新的版本,然后这个错就没了,所以到最后也不知道是不是这个版本的原因

  • 错误二

    • 返回
    {"status":400,"object":"error","code":"validation_error","message":"body failed validation: body.properties.Date.date.end should be a valid ISO 8601 date string, `null`, or `undefined`, instead was `\"null\"`."}
    
    • 这会我的 Date属性的date里面有个end字段
      Date
    • 然后把end字段删除就行,没有end字段默认是null

参考资料

  1. https://jimsyun.notion.site/flow-Notion-b1a92eb467a14a7fae0563f50a18938d
  2. https://sspai.com/post/73645
  3. https://www.youtube.com/watch?v=bQGCQhIyJKY
  4. https://developers.notion.com/reference/property-item-object#date-property-values
EOF