notion_into_sqlite/
lib.rs1pub mod json_util;
2pub mod notion_client;
3pub mod notion_database;
4pub mod notion_pages;
5pub mod sqlite;
6
7#[macro_use]
8extern crate log;
9
10use crate::notion_client::NotionClient;
11use crate::sqlite::Sqlite;
12use anyhow::{Context, Result};
13
14pub fn main(api_key: &str, database_id: &str, output: &str) -> Result<()> {
15 env_logger::init();
16
17 Sqlite::validate_database_path(output)
18 .with_context(|| format!("Failed to create a database file {}", output))?;
19
20 let client = NotionClient {
21 api_key: api_key.into(),
22 };
23
24 let schema = client
25 .get_database(database_id)
26 .with_context(|| "Failed to fetch database schema")?;
27 let pages = client
28 .get_all_pages(database_id, &schema)
29 .with_context(|| "Failed to fetch pages")?;
30
31 let sqlite = Sqlite::new(output, &schema).with_context(|| "Failed to connect to sqlite")?;
32 sqlite
33 .create_tables()
34 .with_context(|| "Failed to create tables")?;
35
36 for page in pages {
37 sqlite
38 .insert(&page)
39 .with_context(|| "Failed to insert pages to sqlite")?;
40 }
41
42 Ok(())
43}