notionmd

package module
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 5, 2025 License: MIT Imports: 2 Imported by: 0

README ΒΆ

NotionMD

Seamlessly Convert Markdown to Notion Blocks

Go Reference Go Report Card CI

NotionMD is a powerful Go package that bridges the gap between Markdown and Notion. It allows you to effortlessly convert your Markdown content into Notion blocks, making it easier than ever to integrate your existing Markdown documents into your Notion workspace.

🌟 Key Features

  • Markdown to Notion: Convert Markdown documents to Notion blocks with a single function call
  • Rich Content Support: Handles a variety of Markdown elements including headings, links, lists, and paragraphs
  • Large Document Handling: Efficiently processes large documents by breaking blocks into manageable chunks
  • Easy Integration: Designed to work seamlessly with Notion API clients

πŸš€ Quick Start

Installation

Get started with NotionMD in your Go project:

go get github.com/brittonhayes/notionmd
Basic Usage

Here's a simple example of how to use NotionMD:

package main

import (
    "encoding/json"
    "log"
    "fmt"
    "github.com/brittonhayes/notionmd"
)

func main() {
    markdown := `
# Welcome to NotionMD
- Convert Markdown easily
- Integrate with Notion seamlessly`

    blocks, err := notionmd.Convert(markdown)
    if err != nil {
       log.Fatal(err) 
    }

    // Print the resulting Notion blocks
    result, _ := json.MarshalIndent(blocks, "", "  ")
    fmt.Println(string(result))
}
Click to see the output
[
  {
    "heading_1": {
      "rich_text": [
        {
          "type": "text",
          "plain_text": "Welcome to NotionMD",
          "text": {
            "content": "Welcome to NotionMD"
          }
        }
      ],
      "is_toggleable": false
    }
  },
  {
    "bulleted_list_item": {
      "rich_text": [
        {
          "type": "text",
          "plain_text": "Convert Markdown easily",
          "text": {
            "content": "Convert Markdown easily"
          }
        }
      ]
    }
  },
  {
    "bulleted_list_item": {
      "rich_text": [
        {
          "type": "text",
          "plain_text": "Integrate with Notion seamlessly",
          "text": {
            "content": "Integrate with Notion seamlessly"
          }
        }
      ]
    }
  }
]
Creating a Notion Page from Markdown

This example demonstrates how to create a Notion page using the blocks parsed from a Markdown document

package main

import (
    "context"
    "log"
    "os"

    "github.com/brittonhayes/notionmd"
    "github.com/dstotijn/go-notion"
)

func main() {
    // Read the Markdown file
    markdown, err := os.ReadFile("example.md")
    if err != nil {
        log.Fatalf("Error reading Markdown file: %v", err)
    }

    // Convert the Markdown content to Notion blocks
    blocks, err := notionmd.Convert(string(markdown))
    if err != nil {
        log.Fatalf("Error converting Markdown to Notion blocks: %v", err)
    }

    // Initialize the Notion client
    client := notion.NewClient(os.Getenv("NOTION_API_KEY"))

    // Create a new page in Notion
    parentPageID := "your-parent-page-id" // Replace with your actual parent page ID
    newPage, err := client.CreatePage(context.Background(), notion.CreatePageParams{
        ParentType: notion.ParentTypePage,
        ParentID:   parentPageID,
        Title: []notion.RichText{
            {
                Text: &notion.Text{
                    Content: "Markdown to Notion Example",
                },
            },
        },
        Children: blocks,
    })
    if err != nil {
        log.Fatalf("Error creating Notion page: %v", err)
    }

    log.Printf("Successfully created Notion page with ID: %s", newPage.ID)
}

[!NOTE]
Make sure to set the NOTION_API_KEY environment variable with your Notion API key and replace "your-parent-page-id" with the actual ID of the parent page where you want to create the new page.

πŸ“ Supported Markdown

  • βœ… Headings
  • βœ… Bold Text
  • βœ… Italic Text
  • βœ… Ordered Lists
  • βœ… Unordered Lists
  • βœ… Code Blocks
  • βœ… Links

πŸ§ͺ Testing

Ensure the reliability of NotionMD by running the test suite:

go test ./... -v -cover

🀝 Contributing

We welcome contributions from the community! If you'd like to contribute:

  1. Fork the repository
  2. Create a new branch for your feature or bug fix
  3. Make your changes and write tests if applicable
  4. Submit a pull request with a clear description of your changes

Please open an issue if you find a bug or have a feature request.

πŸ“„ License

NotionMD is open-source software licensed under the MIT License. See the LICENSE file for details.

πŸ™ Acknowledgements

πŸ“š Learn More

For detailed API documentation and advanced usage examples, visit our Go Package Documentation.


Built with πŸ–€ by Britton Hayes and contributors. If you find NotionMD useful, consider giving it a star on GitHub!

Documentation ΒΆ

Index ΒΆ

Constants ΒΆ

This section is empty.

Variables ΒΆ

This section is empty.

Functions ΒΆ

func Convert ΒΆ

func Convert(markdown string) ([]notion.Block, error)

Convert takes a markdown document as text, parses it into an AST node, and iterates over the tree with the convertNode function, converting each of the nodes to Notion blocks.

Types ΒΆ

This section is empty.

Directories ΒΆ

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL