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)

浙公网安备 33010602011771号