前言

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

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

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 进行集成,让我们的文章更加的丰富。

DevNow x Notion的更多相关文章

  1. 笔记软件 notion

    笔记软件 notion :     https://www.notion.so 注册:zengxinle@126.com     团队:Hopesun

  2. notion笔记

    不错的笔记应用, 模式新颖, 正在使用, 如有相同使用者可以入群交流 notion QQ群 725638123

  3. Mac电脑最常见的办公软件是什么?Notion for Mac多功能办公笔记软件使用方法

    Notion for Mac是一款最新的高效率.办公类软件,相信许多用户在办公的时候需要打开特别多的在线工具,譬如Google Drive.Dropbox Paper.Confluence.GitHu ...

  4. 2021软工-调研作业-Notion

    2021软工-调研作业-Notion 项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 学习软件开发的工业化 ...

  5. Book2Notion:将豆瓣图书信息同步到Notion的Chrome插件

    背景 前几天写了一个python脚本从豆瓣爬数据然后保存到Notion,被身边同学吐槽使用起来太麻烦,而且也不是所有人都会Python(原话是充满了码农版"何不食肉糜").正好最近 ...

  6. 从 Notion 分片 Postgres 中吸取的教训(Notion 工程团队)

    https://www.notion.so/blog/sharding-postgres-at-notion 今年(2021)早些时候,我们对 Notion 进行了五分钟的定期维护. 虽然我们的声明指 ...

  7. 用 notion 管理信用卡与花呗

    用 notion 管理信用卡与花呗 Notion原文,排版更佳 概述 不需要提醒功能和安卓用户可以忽略Scriptable和快捷指令 app的设置 Notion 建立信用卡表格,录入信用卡基本信息,自 ...

  8. 数据对接:从Notion Database到低代码平台

    前言 Notion简介 近几年,有一款叫Notion的产品异常火爆,它是集笔记.任务管理.Wiki.数据管理为一体的产品,他主打两个理念「模块化」和「All-in-one」,Notion最有魅力的还是 ...

  9. 一招教你 Notion 文章导出到公众号

    Notion是一个功能强大的笔记应用程序,有许多优点,包括: 用户友好的界面 跨平台支持 可以结构化组织笔记 多人协作 可以添加多种类型的媒体文件 可以添加评论和任务 这些优点使Notion成为一个广 ...

  10. Notion AI : 让表达如此简单

    前言 写作如说话,想说与说明白中间隔着沟壑! 下面用 Notion AI 作诗来作为本文开头吧. 想说与说明白(作者:Notion AI) 想说千言万语,说明白却难如登天. 言语之间,沟壑重重,思想与 ...

随机推荐

  1. vant2 List 组件 下拉加载 onLoad

    ps:loading finished onLoad 两个变量一个函数 : async onLoad() { console.log("onload"); // 异步更新数据 // ...

  2. Vue 项目优化解决方案 有哪些 ?

    1. 打包的时候 , 通过插件把css代码单独抽离出来使用 link 引入 2. 打包的时候 , 通过webpack内置插件optimization  把 公共的js代码抽离出来 ps:打包之后,代码 ...

  3. CEOI2023

    Day1 T1 A Light Inconvenience (light) 题意:若干个人排成一个队列,保证任何时刻队列中都有至少一个人.每个人手中有一个火把,火把有点亮和熄灭两种状态. 现在进行 \ ...

  4. 多平台文章同步浏览器插件 – ArticleSync

    ArticleSync - 多平台文章同步插件 ArticleSync 是一个浏览器扩展,帮助用户轻松将文章同步发布到多个社交平台.支持将文章从本地草稿发布到各大平台,如知乎.Bilibili 等.它 ...

  5. Runtime类的简单应用

    1.描述 Runtime:描述运行时状态. 在整个JVM中,Runtime类是唯一一个与JVM运行状态有关的类,且默认提供一个该类的实例化对象. 由于在每一个JVM进程中只允许提供一个Runtime类 ...

  6. js常用函数-02 _关于$(function () { })的运行时机

    js常用函数-02 _关于$(function () { })的运行时机 代码模式: $(function() { //执行操作 }); 查找到的结果: (function() {}),即 $(doc ...

  7. games101_Homework6

    实现 Ray-Bounding Volume 求交与 BVH 查找 在本次编程练习中,你需要实现以下函数: • IntersectP(const Ray& ray, const Vector3 ...

  8. CF2027D The Endspeaker (Hard Version) 题解

    题面 给你一个长度为 \(n\) 的数组 \(a\) 和一个长度为 \(m\) 的数组 \(b\) (所有 \(1 \le i < m\) 满足 \(b_i > b_{i+1}\) ).最 ...

  9. linux下的rpm与yum

    一.源代码形式 1.      绝大多数开源软件都是直接以原码形式发布的 2.      源代码一般会被打成.tar.gz的归档压缩文件 3.      源代码需要编译成为二进制形式之后才能够运行使用 ...

  10. nginx之常见错误

    在此只介绍源码安装nginx的时候,发生的一些常见的错误 1. nginx访问出现File not found 1) php-fpm找不到SCRIPT_FILENAME中执行的PHP文件 更改配置文件 ...