DinoxDinox AI笔记
API

导入 API

书摘等软件按来源和外部编号把笔记导入 Dinox,重复提交时更新同一篇笔记。

导入 API

这个接口按来源和外部编号找到原来的笔记再写入。书摘软件、剪藏工具和其他需要反复同步的应用都使用它。

普通的新建笔记请看 开放接口。

书摘软件怎么对接

下面用一个书摘软件举例。软件里每本书、每条划线都有自己的编号。Dinox 用这个编号认出同一条内容。书名和简介写在笔记上,作者、章节和所属书籍使用微信读书同一套属性。

对接按这个顺序做。

1. 固定一个来源名

选一个短名字,之后一直用它,例如 reeden。只使用小写字母、数字、_、-,最长 32。这个名字要由 Dinox 开通。未开通时返回 source is not supported,笔记不会写入。

2. 让用户填入 API Token

用户在 Dinox App 打开 设置 → 同步设置 → API Token,复制后填到书摘软件里。之后每次请求都放在请求头:

Authorization: <用户的 Token>

3. 使用微信读书同一套属性

书摘请使用微信读书导入已经在用的属性,不要另起 书籍、章节 这类名字。用户在 App 里同步过微信读书后,账号里就有这些属性。导入前调用 列出已有属性,确认下面的 key 都在。缺少时不要换名字,请让用户先在 App 里同步一次微信读书。

curl https://aisdk.chatgo.pro/api/openapi/knowledge/properties \
  -H "Authorization: <用户的 Token>"
key名称类型写在哪里怎么填
reading_kind阅读类型单选书和划线都写书传 book 或 书。划线传 excerpt 或 书摘
book所属书籍关联只写在划线上书的 noteId 数组,例如 ["0195b9ae-..."]
author作者文本只写在书上作者名
publication_date出版日期日期只写在书上2018-09-01
isbnISBN文本只写在书上13 位数字,不带横线
chapter章节文本只写在划线上章节名
page页码文本只写在划线上页码

划线上不要写 author。作者以书那一篇为准。没有的值就不要传这个 key,例如没有 ISBN 时不要传空字符串。

4. 先导入书

一本书对应一篇笔记。id 用这本书在书摘软件里的编号,以后不要换。title 放书名,content 放 Markdown 简介。一次最多 50 条。

curl -X POST https://aisdk.chatgo.pro/api/openapi/notes/import \
  -H "Authorization: <用户的 Token>" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "reeden",
    "items": [
      {
        "id": "book-1",
        "title": "原则",
        "content": "这本书讲决策原则。",
        "properties": {
          "reading_kind": "book",
          "author": "瑞·达利欧",
          "publication_date": "2018-09-01",
          "isbn": "9787508684031"
        }
      }
    ]
  }'

返回:

{
  "code": "000000",
  "msg": "success",
  "data": {
    "items": [
      {
        "id": "book-1",
        "noteId": "0195b9ae-6bf1-7c34-9b95-0c45d26c9a31",
        "status": "created"
      }
    ]
  }
}

记下这次返回的 noteId。它是这本书在 Dinox 里的笔记编号,下一步用来把划线挂到这本书上。

书和划线要分两次提交

同一次请求里还拿不到新笔记的 noteId。先提交书,等返回后,再提交划线。

5. 再导入划线

一条划线对应一篇笔记。id 用这条划线在书摘软件里的编号。content 放摘录正文。book 的值是上一步返回的 noteId,并且必须是数组。只有摘录、没有想法时,type 用 crawl。摘录后面还写了想法时,type 用 note,想法接在正文后面。

curl -X POST https://aisdk.chatgo.pro/api/openapi/notes/import \
  -H "Authorization: <用户的 Token>" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "reeden",
    "items": [
      {
        "id": "hl-9",
        "title": "划线",
        "type": "crawl",
        "content": "痛苦加反思等于进步。",
        "properties": {
          "book": ["0195b9ae-6bf1-7c34-9b95-0c45d26c9a31"],
          "reading_kind": "excerpt",
          "chapter": "第一章",
          "page": "12"
        }
      }
    ]
  }'

返回里的 status 为 created 时,这条划线已经写入,并关联到《原则》。

同一批里只要有一条属性不合法,这一批都不会写入。提交前先确认 key 和值。

6. 以后只提交有变化的内容

书摘软件自己记住上次同步的时间,下次只提交这之后新增或改过的书和划线。时间只用来少传数据。认出同一篇笔记靠的是原来的 source 和 id。

下次同步仍然先传书,再用返回的 noteId 传划线。status 为 unchanged 或 protected 时也会带回原来的 noteId,可以继续挂新划线。

{
  "code": "000000",
  "msg": "success",
  "data": {
    "items": [
      {
        "id": "book-1",
        "noteId": "0195b9ae-6bf1-7c34-9b95-0c45d26c9a31",
        "status": "unchanged"
      },
      {
        "id": "hl-9",
        "noteId": "0195c1d2-2a10-7b11-8c20-6e5f0a1b2c3d",
        "status": "protected"
      }
    ]
  }
}
status软件应该怎么做
created新笔记已写入。本次用返回的 noteId 去关联其他笔记
updated用户没有改过这篇笔记,内容已按本次提交更新
unchanged和上次导入相同,不用再处理
protected用户在 Dinox 里改过或删除过。保留用户的版本,不要换一个新 id 再传

用户改过的笔记会保留

同一篇笔记只要在 Dinox 里被修改或删除,之后的导入不会覆盖它,也不会把它重新建出来。

更新时如果不传 title、type、properties,原来的值会保留。划线只改了正文时,可以不传 properties,所属书籍还在。要改关联或章节时,传入完整的 properties,因为传入后会替换整组属性。

基础信息

  • 基础域名:https://aisdk.chatgo.pro
  • 接口地址:POST /api/openapi/notes/import
  • 认证方式与 开放接口 相同
  • 使用 OAuth 时需要 dinox.notes.write 权限
  • 限流:每个 Token 每小时 200 次。一次请求可以提交最多 50 条笔记

请求参数

Content-Type: application/json

参数名类型必填说明
sourcestring是来源名。服务端会转成小写。不能使用 api
itemsarray是要导入的笔记,1 到 50 条
items[].idstring是这条内容在对方软件里的编号,最长 512。同一次请求里不能重复
items[].contentstring是Markdown 正文
items[].titlestring否标题,最长 500。更新时不传则保留原标题
items[].typestring否note 或 crawl。新建默认 note。更新时不传则保留原类型
items[].propertiesobject否笔记属性。更新时传入会替换整组属性;不传则保留原属性

属性规则与开放接口里的文本创建相同。单选、多选、状态可以填选项显示名。进度类数字用 0 到 1。评分是 0 到 5 的整数。关联属性的值是笔记 noteId 数组。

错误码

错误码说明
000000成功
000001参数错误,或来源未开通
000005服务器暂时无法导入
000008认证失败

On this page