用 Notion API 批量添加单选/多选属性彩色标签

summary
在 Notion 数据库中,从文本属性转成单选或多选属性时,所有属性的颜色都是默认的灰色。如果希望呈现彩色,可以事先用 API 或手动的方式,输入所有可能的标签。
tags
Notion
API
Tip
date
Sep 3, 2021
Chinese version
English version
💡
Notion 数据库中,从文本属性转成单选或多选属性时,所有标签都是默认的灰色。如果希望显示彩色,可以事先用 API 或手动输入所有标签。
问题来源:Telegram Notion 中文社区 @SKee
请问,有没有办法,让单选属性的标签一次性多色。从文本属性转换过来都是灰色的。
原始:直接转换得到的都是灰色
原始:直接转换得到的都是灰色
期望的效果:彩色标签
期望的效果:彩色标签

操作流程

  • 新建一列多选属性
  • 用 API 或手动的方式输入所有可能的标签
  • 把标签从另一列文本属性粘贴过来(复制时要选中文本属性列所有单元格,粘贴时选中多选属性列第一格即可)
  • 如果最终需要单选属性,就把多选属性转为单选

API Python 代码

依赖

  • requests

配置项

  • API_TOKEN: API token
  • DATABASE_ID: 要操作的 database id(记得给这个 bot 打开这个数据库的操作权限)
  • MULTI_SELECT_PROPERTY_NAME: 新建的多选属性名称
  • RAW_DATA: 文本属性列的所有内容带换行粘贴到两个 """ 之间

代码流程

从文本属性内容中提取出标签
  • 标签是每行中由逗号隔开的值,并按照 Notion 中规则,对每个标签去除首尾空格,中间多个空格减为1,以及去除空标签
  • 将标签去重(+排序,更便于使用)
  • 在数据库中新建一个页面,多选属性中填入去重后的所有标签

后续操作

这个新建的页面已经完成了它的使命,可以删除了,彩色的标签们会保留

代码

# pre-define some tags, to show colorful tags in multi-select or select property. More on: https://niin.notion.site/Notion-API-ca530a6a86124de48c456a0cbc10f565
import requests

# --------------- configurations start here --------------------
API_TOKEN = "YOUR_NOTION_API_TOKEN"
DATABASE_ID = "YOUR_NOTION_DATABASE_ID"
MULTI_SELECT_PROPERTY_NAME = "MULTI_SELECT_PROPERTY_NAME"
RAW_DATA = """PASTE
TEXT
COLUMN, WITH COMMA
HERE"""
# ---------------- configurations end here ---------------------

# get multi select property input tags
tags_list = [' '.join(tag.strip().split()) for line in RAW_DATA.split("\n") for tag in line.split(",") if tag.strip()]
tags_set = sorted(set(tags_list))
tags_dict_list = [{"name": x} for x in tags_set]

# prepare json data for request
request_data = {
    "parent": { "database_id": DATABASE_ID },
    "properties": {
        MULTI_SELECT_PROPERTY_NAME: tags_dict_list
    }
}

print(tags_list)
# make request to create new page in this database
r = requests.request(
    "POST",
    "https://api.notion.com/v1/pages",
    headers={"Authorization": "Bearer " + API_TOKEN, "Notion-Version": "2021-08-16"},
    json=request_data
)
print(r.text)
 

© Niin Ni 2021 - 2024