用 Notion API 批量添加单选/多选属性彩色标签
summary
在 Notion 数据库中,从文本属性转成单选或多选属性时,所有属性的颜色都是默认的灰色。如果希望呈现彩色,可以事先用 API 或手动的方式,输入所有可能的标签。
tags
Notion
API
Tip
date
Sep 3, 2021
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)