Notion生日计算器

设计这个小工具的起因是想用Notion来提醒记录好友生日,然后定期给他们发消息、买礼物等。但后来发现有两个问题:一是好友生日获取很麻烦;二是每次阴历和阳历转换都要执行一次程序,虽然也可以部署到网上自动执行,但对于小白来说不友好。所以最后搁置了。以下是自己用到的代码,希望对后续想做的朋友有帮助。

Notion 助手 - GET 用链接获取内容

# 使用教程
    # 把待检测页面链接复制过来
    # 选择类型
    # 注册机器人并把机器人邀请到你的 notion 页面里
    # 填写机器人令牌
    # 运行~
    # 查看 or 复制输出结果

# 导入模块,不要碰,其中 re 是用于筛选 ID 的正则表达式模块
import requests; import re

# 待检测链接(两端要添加单引号/双引号)
URL = 'XXXX'

# 选择待测试链接类型(0 = 数据库,1 = 页面, 2 = 块对象(块对象已封存需自行解锁), 用户对象没写)
TypeList = 1

# 机器人令牌, 复制对应的机器人令牌粘贴过来就好,注意要带引号
Token = "XXXXX"

# 类型数组,不用碰,用于拼接在 API 链接后面
Type = [
    # 0 = 数据库类型
    "databases/" + ID, 
    # 1 = 页面类型    
    "pages/" + ID, 
    # 2 = 块类型
    # 感觉 block 模块没用,封存
    # "blocks/" + ID + "/children"
    ]

# 待查询的 API 链接
API_URL = 'https://api.notion.com/v1/' + Type[TypeList]

# 调试输出
# print('\n\n待搜链接为\n\n', API_URL, '\n\n')

# 通过 Notion API 拉取数据
NotionData = requests.request(
    "GET",
    API_URL,
    headers={
        # 设置机器人令牌
        "Authorization": Token, 
        # 设置 Notion 版本
        "Notion-Version": "2021-05-13"
        },
    )

# 先行定义函数,避免后期拉取数据转化为字典时报错
false = False
true = True
null = None

# 将返回内容转换为字典
NotionDict = eval(NotionData.text)

# 数据类型对照表
messageList = {
    "database": "数据库", 
    "page": "页面", 
    "database_id": "数据库", 
    "page_id": "页面", 
}

# 报错消息对照表
errorMessageList = {
    404: "未找到该页面,请检查链接或测试类型是否正确", 
    401: "机器人令牌错误", 
    400: "验证失败,请检查所选类型或待测 ID 是否正确"
}

# 输出全部拉取内容
print('\n\n' + NotionData.text + "\n\n完整数据如上,其余数据如下\n")

# 输出读取到的数据类型及父级界面ID
if NotionDict['object'] in ['database', 'page', 'list']:
    # 专为 block 类型弄得消息提示……但是发现它没有父级页面信息……聊胜于无吧
    if NotionDict['object'] == 'list':
        print("链接类型:" + messageList[NotionDict['object']] + "\n")
    else:
        print(
            "链接类型:" + messageList[NotionDict['object']] + "\n" \
            "父级类型:" + messageList[NotionDict['parent']['type']] + "\n" \
            "父级界面ID:" + NotionDict['parent'][NotionDict['parent']['type']] + "\n" \
        )
# 输出已知报错
elif NotionDict['status'] in list(errorMessageList):
    print(
        '错误代码:' + str(NotionDict['status']) + '\n'\
        '操作失败:' + errorMessageList[NotionDict['status']] + '\n'\
        '报错原文:' + NotionDict['message'] + '\n'
    )
# 输出未知报错
else:
    print(
        '错误代码:' + str(NotionDict['status']) + '\n'\
        '未知错误:' + NotionDict['message'] + '\n'
    )

Notion 助手 - POST 添加记录

# 导入模块,不要碰,其中 re 是用于筛选 ID 的正则表达式模块
import requests; import re

# 父级链接(两端添加引号)
URL = 'bbae1170-539f-40fe-a03d-0d07eb5a8b60'

# 选择操作类型
    # 0 = 查询数据库
    # 1 = 创建数据库
    # 2 = 创建页面
    # 3 = 添加块(Block)
TypeList = 2

# 选择父页面类型
    # 0 = 数据库
    # 1 = 页面
PartentList = 0

# 机器人令牌, 复制对应的机器人令牌粘贴过来就好,注意要带引号
Token = "XXXXX"

ID = (re.search('([0-9a-zA-Z]{32})', re.sub(r'-', '', re.sub(r'\/.*-', '', format(URL))))).group(1)

# 测试类型组,不用碰
TypeAPI_URL = ["databases/" + ID + '/query', 'databases', "pages", 'blocks/' + ID + '/children']
TypeParent = ["database_id", "page_id"]

# 制作消息体
body = {
    "parent": {
        "type": TypeParent[PartentList], 
        TypeParent[PartentList]: ID
        },
    "properties": {
        "数量":{
            "select":{
                "name":"1"
            }},
        "类别":{
            "select":{
                "name":"咖啡因片"
            }},
        "单份含量":{
            "select":{
                "name":"200mg"
            }},
        "服药日期":{
            "date":{
                "start":"2021-08-03T05:32:00.000+08:00"
            }},
        # 可以在这里留下你的 ID 哦
        "测试员":{
            "rich_text":[{
                    "text":{
                        "content":"默认测试人",
            },}]}}
    }

# 待使用的 API 链接
API_URL = 'https://api.notion.com/v1/' + TypeAPI_URL[TypeList]

# 访问数值
NotionData = requests.request(
    "POST",
    # API 链接
    API_URL,
    # 读取消息体
    json = body,
    headers={
        # 设置机器人令牌
        "Authorization": Token, 
        # 设置 Notion 版本
        "Notion-Version": "2021-05-13"
        },
    )

# 先行定义函数,避免后期拉取数据转化为字典时报错
false = False
true = True
null = None

# 将返回内容转换为字典
NotionDict = eval(NotionData.text)

# 数据类型对照表
messageList = {
    "database": "数据库", 
    "page": "页面", 
    "database_id": "数据库", 
    "page_id": "页面", 
    # 感觉 block 模块没用,封存
    #"block": "块", 
}

# 报错消息对照表
errorMessageList = {
    404: "未找到页面,请检查链接或测试类型是否正确", 
    401: "机器人令牌错误", 
    400: "未提供标题 (Title) 或父页面类型选择错误或消息体编辑错误",
    # 如果有新的报错代码可以发给作者让他更新
    # 少数派@飘扬:https://sspai.com/u/czyfcdwn/updates
    # QQ:1811753618
}

# 输出全部拉取内容
print('\n\n' + NotionData.text + "\n\n完整数据如上,运行状态如下\n")

# 输出读取到的数据类型及父级界面ID
if NotionDict['object'] == 'page':
    print(
        "运行结果:操作成功, 已成功添加新页面\n" + \
        "直达链接:" + NotionDict.get("url") + '\n'
    )
# 输出已知报错
elif NotionDict['status'] in list(errorMessageList):
    print(
        '错误代码:' + str(NotionDict['status']) + '\n'\
        '操作失败:' + errorMessageList[NotionDict['status']] + '\n'\
        '报错原文:' + NotionDict['message'] + '\n'
    )
# 输出未知报错
else:
    print(
        '错误代码:' + str(NotionDict['status']) + '\n'\
        '未知错误:' + NotionDict['message']
    )

在notion中实现阴历和阳历转化

# ntn_5959449859XXXX
# 数据库 1a9XXX
import requests
from datetime import datetime
from lunardate import LunarDate

token = "XXXXX" 
database_id = "XXX"

NotionData = requests.post(
    url="https://api.notion.com/v1/databases/{}/query".format(database_id) ,
    headers={"Authorization": "Bearer " + token, "Notion-Version": "2021-05-13"},
)
# print(NotionData.text) #打印是否导出成功
# 先行定义函数,避免后期拉取数据转化为字典时报错
false = False
true = True
null = None
# 将返回内容转换为字典
NotionDict = eval(NotionData.text)
results_list=NotionDict['results']

# print(NotionDict['results']) #打印所有信息
for i in range(len(results_list)):
    results_one=results_list[i]
    if results_one['properties']['年龄']['number']==-1:
        print(results_one)
        # 提取公历出生日期字符串
        nongli_date_str = results_one['properties']['公历出生日期(必填)']['date']['start']
        # 解析公历日期
        solar_date = datetime.strptime(nongli_date_str, '%Y-%m-%d')
        print(solar_date)
posted @ 2026-01-05 22:18  东血  阅读(13)  评论(0)    收藏  举报

载入天数...载入时分秒...