1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| const { markdownToBlocks } = require('@tryfabric/martian'); const { Client } = require("@notionhq/client"); const fs = require("fs"); const path = require("path");
const notion = new Client({ auth: "XXX" });
const databaseId = "XXX";
const localFolderPath = "/blog/source/_posts";
async function syncMarkdownToNotion() { console.log("Starting sync...");
const files = fs.readdirSync(localFolderPath);
for (const file of files) { if (path.extname(file) === ".md") { const filePath = path.join(localFolderPath, file); const content = fs.readFileSync(filePath, "utf-8"); const title = path.basename(file, ".md");
console.log(`Processing file: ${title}`);
const existingPage = await findPageByTitle(title);
if (existingPage) { console.log(`Updating page: ${title}`); await updatePage(existingPage.id, title, content); } else { console.log(`Creating page: ${title}`); await createPage(title, content); } } }
console.log("Sync completed."); }
async function findPageByTitle(title) { const response = await notion.databases.query({ database_id: databaseId, filter: { property: "Name", title: { equals: title, }, }, });
return response.results[0]; }
async function createPage(title, content) {
await notion.pages.create({ parent: { database_id: databaseId, }, properties: { Name: { title: [ { text: { content: title, }, }, ], }, }, children: markdownToBlocks(content) });
console.log(`Page created: ${title}`); }
async function updatePage(pageId, title, content) {
await notion.pages.update({ page_id: pageId, properties: { Name: { title: [ { text: { content: title, }, }, ], }, }, children: markdownToBlocks(content) });
console.log(`Page updated: ${title}`); }
syncMarkdownToNotion();
|