Files
tradesync/examples/fetch_notion_db.rs
T

69 lines
2.1 KiB
Rust

use anyhow::{Context, Result};
use dotenvy::dotenv;
use reqwest::header::{AUTHORIZATION, HeaderMap, HeaderValue};
use std::env;
fn format_db_id(id: &str) -> String {
let cleaned = id.replace("-", "");
if cleaned.len() == 32 {
format!(
"{}-{}-{}-{}-{}",
&cleaned[0..8],
&cleaned[8..12],
&cleaned[12..16],
&cleaned[16..20],
&cleaned[20..32]
)
} else {
id.to_string()
}
}
#[tokio::main]
async fn main() -> Result<()> {
let _ = dotenv();
let token = env::var("NOTION_API_KEY").context("Missing NOTION_API_KEY")?;
let db_id_raw = env::var("NOTION_DATABASE_ID").context("Missing NOTION_DATABASE_ID")?;
let db_id = format_db_id(&db_id_raw);
// Setup headers
let mut headers = HeaderMap::new();
headers.insert("Notion-Version", HeaderValue::from_static("2022-06-28"));
headers.insert(
AUTHORIZATION,
HeaderValue::from_str(&format!("Bearer {}", token))?,
);
let client = reqwest::Client::builder()
.default_headers(headers)
.build()?;
// 1. Try GET /v1/databases/{db_id}
let get_url = format!("https://api.notion.com/v1/databases/{}", db_id);
println!("Sending GET request to: {} ...", get_url);
let get_res = client.get(&get_url).send().await?;
let get_status = get_res.status();
let get_body = get_res.text().await?;
println!("GET Status: {}", get_status);
println!("GET Body:\n{}", get_body);
println!("\n--------------------------------------------------\n");
// 2. Try POST /v1/databases/{db_id}/query
let post_url = format!("https://api.notion.com/v1/databases/{}/query", db_id);
println!("Sending POST request to: {} ...", post_url);
let post_res = client
.post(&post_url)
.header("Content-Type", "application/json")
.body("{}")
.send()
.await?;
let post_status = post_res.status();
let post_body = post_res.text().await?;
println!("POST Status: {}", post_status);
println!("POST Body:\n{}", post_body);
Ok(())
}