Project Icon

martian

Markdown到Notion API转换解析器

Martian是一款Markdown到Notion API转换解析器,支持多种Markdown元素转换为Notion块或富文本对象。它简化了Notion SDK和API的使用流程,适配Notion API 1.0版本。Martian提供灵活配置选项,有效处理Notion API的限制,确保输出内容符合规范。

Martian: Markdown 到 Notion 解析器

将 Markdown 和 GitHub 风格的 Markdown 转换为 Notion API 块和富文本。

Node.js CI 代码风格: Google

Martian 是一个 Markdown 解析器,可以将任何 Markdown 内容转换为 Notion API 块或富文本对象。它使用 unified 创建 Markdown 抽象语法树(AST),然后将 AST 转换为 Notion 对象。

旨在使 Notion SDK 和 API 的使用更加简便。适用于 Notion API 1.0 版本。

支持的 Markdown 元素

  • 所有内联元素(斜体、粗体、删除线、内联代码、超链接、方程式)
  • 列表(有序、无序、复选框)- 支持任意深度
  • 所有标题(3级及以上的标题都被视为3级标题)
  • 代码块,支持语言高亮
  • 引用块
  • 表格
  • 方程式
  • 图片
    • 内联图片会从段落中提取并在后面添加(因为 Notion 不支持内联图片)
    • 图片 URL 会进行验证,如果不符合 Notion 外部规范,将以文本形式插入,供您手动修复

使用方法

基本用法:

该包导出两个函数,您可以按以下方式导入:

// JS
const {markdownToBlocks, markdownToRichText} = require('@tryfabric/martian');
// TS
import {markdownToBlocks, markdownToRichText} from '@tryfabric/martian';

以下是两个函数的使用示例:

markdownToRichText(`**Hello _world_**`);
结果
[
  {
    "type": "text",
    "annotations": {
      "bold": true,
      "strikethrough": false,
      "underline": false,
      "italic": false,
      "code": false,
      "color": "default"
    },
    "text": {
      "content": "Hello "
    }
  },
  {
    "type": "text",
    "annotations": {
      "bold": true,
      "strikethrough": false,
      "underline": false,
      "italic": true,
      "code": false,
      "color": "default"
    },
    "text": {
      "content": "world"
    }
  }
]
markdownToBlocks(`
hello _world_ 
*** 
## heading2
* [x] todo
`);
结果
[
  {
    "object": "block",
    "type": "paragraph",
    "paragraph": {
      "rich_text": [
        {
          "type": "text",
          "annotations": {
            "bold": false,
            "strikethrough": false,
            "underline": false,
            "italic": false,
            "code": false,
            "color": "default"
          },
          "text": {
            "content": "你好 "
          }
        },
        {
          "type": "text",
          "annotations": {
            "bold": false,
            "strikethrough": false,
            "underline": false,
            "italic": true,
            "code": false,
            "color": "default"
          },
          "text": {
            "content": "世界"
          }
        }
      ]
    }
  },
  {
    "object": "block",
    "type": "heading_2",
    "heading_2": {
      "rich_text": [
        {
          "type": "text",
          "annotations": {
            "bold": false,
            "strikethrough": false,
            "underline": false,
            "italic": false,
            "code": false,
            "color": "default"
          },
          "text": {
            "content": "二级标题"
          }
        }
      ]
    }
  },
  {
    "object": "block",
    "type": "to_do",
    "to_do": {
      "rich_text": [
        {
          "type": "text",
          "annotations": {
            "bold": false,
            "strikethrough": false,
            "underline": false,
            "italic": false,
            "code": false,
            "color": "default"
          },
          "text": {
            "content": "待办事项"
          }
        }
      ],
      "checked": true
    }
  }
]

处理Notion的限制

有时,Markdown输入可能会导致输出被Notion API拒绝:以下是一些处理这种情况的选项。

项目超出子项或字符限制

默认情况下,该包会尝试通过将内容重新分配到多个块来解决此类问题:当无法做到这一点时,martian会截断输出以避免您的请求导致错误。 如果您想禁用这种行为,可以使用以下选项:

const options = {
  notionLimits: {
    truncate: false,
  },
};

markdownToBlocks('输入', options);
markdownToRichText('输入', options);

手动处理与Notion限制相关的错误

您可以为结果项超出Notion限制时设置回调函数。请注意,无论最终输出是否会被截断,此函数都会被调用。

const options = {
  notionLimits: {
    // truncate: true, // 默认值
    onError: (err: Error) => {
      // 发生了某些情况!
      console.error(err);
    },
  },
};

markdownToBlocks('输入', options);
markdownToRichText('输入', options);

处理图片

如果图片的URL无效,Notion API将拒绝整个请求:martian通过将无效链接的图片转换为文本来防止这个问题,这样请求就能成功,您以后可以修复链接。 如果您想禁用这种行为,可以使用以下选项:

const options = {
  strictImageUrls: false,
};

默认行为:

markdownToBlocks('![](https://raw.githubusercontent.com/tryfabric/martian/master/InvalidURL)');
结果
[
  {
    "object": "block",
    "type": "paragraph",
    "paragraph": {
      "rich_text": [
        {
          "type": "text",
          "annotations": {
            "bold": false,
            "strikethrough": false,
            "underline": false,
            "italic": false,
            "code": false,
            "color": "default"
          },
          "text": {
            "content": "InvalidURL"
          }
        }
      ]
    }
  }
]

禁用strictImageUrls

markdownToBlocks('![](https://raw.githubusercontent.com/tryfabric/martian/master/InvalidURL)', {
  strictImageUrls: false,
});
结果
[
  {
    "object": "block",
    "type": "image",
    "image": {
      "type": "external",
      "external": {
        "url": "无效URL"
      }
    }
  }
]

解析富文本时的非内联元素

默认情况下,如果提供给markdownToRichText的文本会产生一个或多个非内联元素,该包会忽略这些元素,只解析段落。 你可以通过将nonInline选项设置为'throw'来使包在检测到非内联元素时抛出错误。

默认行为:

markdownToRichText('# 标题\nAbc', {
  // nonInline: 'ignore', // 默认
});
结果
[
  {
    type: 'text',
    annotations: {
      bold: false,
      strikethrough: false,
      underline: false,
      italic: false,
      code: false,
      color: 'default'
    },
    text: { content: 'Abc', link: undefined }
  }
]

抛出错误:

markdownToRichText('# 标题\nAbc', {
  nonInline: 'throw',
});
结果
错误:不支持的markdown元素:{"type":"heading","depth":1,"children":[{"type":"text","value":"标题","position":{"start":{"line":1,"column":3,
"offset":2},"end":{"line":1,"column":9,"offset":8}}}],"position":{"start":{"line":1,"column":1,"offset":0},"end":{"line":1,"column":9,"offset":8}}}  

Fabric背后的团队用💙构建。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号