DevNow x Notion

前言

Notion 应该是目前用户量比较大的一个在线笔记软件,它的文档系统也非常完善,支持多种文档格式,如 Markdown、富文本、表格、公式等。

早期我也用过一段时间,后来有点不习惯,就换到了 Obsidian ,但是身边人用的还是很多的,随着 Astro 5.0 的发布,在内容集成上也提供了更多的方向,这期就来聊聊 DevNow 对 Notion 的支持。

1.Notion 设置

1.1 创建 Notion 集成

1.1.1 什么是内部集成?

内部集成允许 Notion 工作区成员通过 Notion REST API 与工作区交互。每个内部集成都与单个特定工作区绑定,并且只有工作区内的成员可以使用该集成。将内部集成添加到工作区后,成员必须手动授予集成访问他们希望其使用的特定页面或数据库的权限。

在 集成管理 中添加新的机集成,用来获取 token

成功创建后入下图,我们可以在 功能 模块中管理集成的权限,这里我们主要是读取内容,然后可以获取到 内部集成密钥PUBLIC_NOTION_TOKEN

1.2 创建 Notion 数据源

目前我们集成只能同步 Database 中的内容,所以我们需要先创建一个 Database。

顶部选中的字符串是 PUBLIC_NOTION_DATABASE_ID ,我们需要将其复制下来,后面会用到。

如图,我们创建一个工作站,然后创建一个 Database 数据源,用来管理我们需要在 DevNow 中展示的文章,为了统一文章的结构,我们在 Database 中添加以下属性:

  • title: 文本
  • desc: 文本
  • publishDate: 创建时间
  • image: 图片
  • category: 单选
  • tags: 文本, 如果有多个,请通过 , 分割
  • author: 文本

:::tip[提示]
关于 category 字段,建议大家参考 src/data/category.ts 中的分类,将其添加到 Notion 对应的详细那个中,如下:

这样方便大家在 DevNow 中查看文章时,能够快速找到对应的分类。如果有新增,请同时更新,否则会报错。


:::

1.3 关联集成

我们在对应的工作站中关联相关的集成,这样我们就可以在 DevNow 中通过 Loader 获取相关的内容了。

如图,将我们之前添加的集成关联进来。

1.4 创建新文章

如图,我们需要完善所有的属性:

到这里我们 Notion 相关的配置就完事了。

2. 环境变量配置

如果是通过 Vercel 部署的,可以对应的项目中添加环境变量:

  • PUBLIC_NOTION_DATABASE_ID
  • PUBLIC_NOTION_TOKEN

对应的值就是我们之前创建的 DatabaseIDtoken

如果是私有项目部署的话,可以在 .env 文件中添加相关内容。

3. DevNow 配置

DevNow 中,我们需要配置相关的 loader 来获取我们的内容,由于数据的不同,我们在数据层也要做一下兼容,我们统一将数据格式化成 src/content/config.ts 中的 SCHEMA 格式。

3.1 配置相关的 loader

Notion 的相关 loader 我们通过库 notion-astro-loader 库来实现。
如要接入,请将一下注释打开即可。

...
// import { notionLoader } from 'notion-astro-loader';...
// export const NotionDocs = defineCollection({
//  loader: notionLoader({
//    auth: import.meta.env.NOTION_TOKEN,
//    database_id: import.meta.env.NOTION_DATABASE_ID
//  })
//});export const collections = {doc: Docs,
//  notion: NotionDocs
};

3.2 数据源格式化

相关文件已经在 DevNow 中添加,如果需要计入 Notion 数据源,同上把注释打开即可。

// import { richTextToPlainText } from 'notion-astro-loader';
// import { formatDate } from './utils';// export const getNotionDocs = (await getCollection('notion')).map((item) => {
//   return {
//     id: item.id,
//     body: item.rendered?.html ?? '',
//     data: {
//       title: richTextToPlainText(item.data.properties.title.rich_text),
//       desc: richTextToPlainText(item.data.properties.desc.rich_text),
//       category: item.data.properties.category.select?.name || '',
//       author: richTextToPlainText(item.data.properties.author.rich_text),
//       tags: item.data.properties.tags.rich_text[0].plain_text.split(','),
//       image: item.data.properties.image.url,
//       publishDate: item.data.properties.publishDate.created_time,
//       pin: false
//     },
//     rendered: item.rendered,
//     filePath: item.id,
//     collection: item.collection,
//   };
// });export const latestPosts = [...(await getCollection('doc', ({ data }) => {return import.meta.env.PROD ? data.draft !== true : true;}))// 如果需要接入 Notion 数据源,需要将下面的注释去掉// ...getNotionDocs
].sort((a, b) => new Date(b.data.publishDate).valueOf() - new Date(a.data.publishDate).valueOf());

3.3 遗留问题

由于数据的问题,目前暂时无法实现 Notion 数据源 readTime 计算,所以 Notion 相关文章,暂时不展示。

已经兼容了 Notionheadings 和 其他的相关数据。

结果展示

列表页:

详情页:

总结

到这基本就完事了,可以通过这个方式,将 Notion 作为 DevNow 的数据源,来管理我们的文章。
这样可以更方便我们的数据管理,也可以更好的与 Notion 进行集成,让我们的文章更加的丰富。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/494975.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hCaptcha 图像识别 API 对接说明

hCaptcha 图像识别 API 对接说明 本文将介绍一种 hCaptcha 图像识别 API 对接说明,它可以通过用户输入识别的内容和 hCaptcha验证码图像,最后返回需要点击的小图像的坐标,完成验证。 接下来介绍下 hCaptcha 图像识别 API 的对接说明。 申请…

Move AI技术浅析(二):输入与预处理

一、视频输入模块 1.1 视频输入步骤详解 视频输入模块的主要任务是接收视频数据,并将其转换为后续处理所需的格式。具体步骤: 1.1.1 视频读取 步骤:从文件系统、网络流或摄像头读取视频数据。技术:使用 OpenCV 的 cv2.VideoCa…

Jenkins 任意文件读取(CVE-2024-23897)修复及复现

Jenkins任意文件读取漏洞CVE-2024-23897修复及复现 漏洞详情影响范围漏洞复现修复建议 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行…

远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?

前言 前段时间有个朋友过来咨询关于Windows使用第三方远程软件(向日葵、Todesk等)远程连接控制macOS系统,但出现了一些奇奇怪怪的问题。 比如在连接的时候,一直卡在100%连接,对方的电脑却已经显示已经被控制的状态。…

Datawhale AI 冬令营学习笔记-零编程基础制作井字棋小游戏

井字棋小游戏是通过豆包MarsCode实现的,没有改动任何的代码,全部是通过对话让AI进行优化和改进。 开始进入正题:进入豆包MarsCode在线IDE,直接点击上方蓝字,或复制链接打开: 豆包 MarsCode - 编程助手。 IDE界面&…

利用Circuit JS1再学学电子方面的知识(硬件)

1 电阻器 1.1 电阻并联 每个电阻电压相同,总电流等于各支路电流之和。 并联电阻值 R 1/(1/R11/R2);R约等于90.9 电阻并联后的阻值比最小的一个电阻值都小。 1.2 电阻串联 电阻串联的阻值为各电阻阻值相加。 RR1R2,串联涉及电阻分压。 一般在开关处…

webrtc获取IceCandidate流程

在WebRTC(Web Real-Time Communication)中,ICECandidate是一个关键概念,它用于描述在建立点对点(P2P)连接时可以考虑的潜在通信端点。以下是关于WebRTC中ICECandidate的详细解释: 一、ICECandidate的定义 ICECandidate对象通常包含以下关键属性: foundation:用于唯一…

注意力机制详解

一、引言 注意力机制(Attention Mechanism)源于对人类视觉的研究,是一种在深度学习模型中模拟人类注意力的机制。它允许模型在处理信息时能够聚焦于当前任务最相关的部分,从而提高模型的性能和泛化能力。本文将从注意力机制的起源…

重温设计模式--单例模式

文章目录 单例模式(Singleton Pattern)概述单例模式的实现方式及代码示例1. 饿汉式单例(在程序启动时就创建实例)2. 懒汉式单例(在第一次使用时才创建实例) 单例模式的注意事项应用场景 C代码懒汉模式-经典…

金仓数据库安装-Kingbase v9-centos

在很多年前有个项目用的金仓数据库,上线稳定后就没在这个项目了,只有公司的开发环境还在维护,已经好多年没有安装过了,重温一下金仓数据库安装,体验一下最新版本,也做一个新版本的试验环境; 一、…

LabVIEW中什么和C 语言指针类似?

在LabVIEW中,与C语言指针类似的概念是 引用 (Reference)。 引用在LabVIEW中主要用于以下几个方面: 数据引用:LabVIEW通过引用传递数据,而不是复制数据。通过引用,多个VIs可以共享数据而不需要复制整个数据结构&#xf…

医疗大模型威胁攻击下的医院AI安全:挑战与应对策略

一、引言 1.1 研究背景与意义 随着人工智能技术的迅猛发展,医疗大模型作为一种新兴的技术手段,正逐渐渗透到医疗领域的各个环节,为医疗服务的数字化转型带来了前所未有的机遇。从辅助诊断到疾病预测,从个性化治疗方案的制定到医疗资源的优化配置,医疗大模型展现出了巨大…

在 Vue3 项目中安装和配置 Three.js

简介 Three.js 是一个轻量级的 WebGL 封装库,用于在浏览器中渲染复杂的 3D 图形。它提供了便捷的 API,可以快速构建 3D 场景、对象和动画。 Vue.js 是一个渐进式 JavaScript 框架,擅长构建用户界面。其响应式数据绑定和组件系统使得复杂的交…

编译原理复习---正则表达式+有穷自动机

适用于电子科技大学编译原理期末考试复习。 1. 正则表达式 正则表达式(Regular Expression,简称regex或regexp)是一种用于描述、匹配和操作文本模式的强大工具。它由一系列字符和特殊符号组成,这些字符和符号定义了一种搜索模式…

漏洞检测工具:HOST头部攻击

HOST头部攻击 漏洞定义 Host头部字段在HTTP协议中用于指定请求所针对的域名,以便服务器能够正确地将请求路由到相应的Web应用程序。攻击者通过篡改HTTP请求中的Host头部字段来执行恶意操作。 漏洞危害 Host头部攻击的危害在于它能导致敏感信息泄露、恶意内容执行…

ROS1入门教程6:复杂行为处理

一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…

DL作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),旨在解决普通 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。它通过设计多个门…

WWW23-多行为级联|级联图卷积网络的多行为推荐

论文:https://arxiv.org/abs/2303.15720 代码:https://github.com/SS-00-SS/MBCGCN 这篇论文MB-CGCN和上一篇CRGCN是同一个团队的,都是级联的方式。一个用了残差,一个用了特征转换,文章最后有discussion讨论了两者的不…

JAVA开发入门学习七- 数组

数组的概念 概念 数组: 是多个相同类型数据按照一定排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理 数组中的概念 数组名: 数组的名称,命名 下标: 从0开始 元素:…

【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹

代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…