设计这个小工具的起因是想用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 LunarDatetoken = "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)