Files
brk/crates/brk_client/examples/fetch_prices.rs
2026-01-31 17:39:48 +01:00

52 lines
1.4 KiB
Rust

use std::fs::File;
use std::io::{BufWriter, Write};
use brk_client::{BrkClient, BrkClientOptions, Result};
use brk_types::Dollars;
const CHUNK_SIZE: usize = 10_000;
const END_HEIGHT: usize = 630_000;
const OUTPUT_FILE: &str = "prices_avg.txt";
fn main() -> Result<()> {
let client = BrkClient::with_options(BrkClientOptions {
base_url: "https://next.bitview.space".to_string(),
timeout_secs: 60,
});
let file = File::create(OUTPUT_FILE).map_err(|e| brk_client::BrkError {
message: e.to_string(),
})?;
let mut writer = BufWriter::new(file);
for start in (0..END_HEIGHT).step_by(CHUNK_SIZE) {
let end = (start + CHUNK_SIZE).min(END_HEIGHT);
eprintln!("Fetching {start} to {end}...");
let ohlcs = client
.metrics()
.price
.cents
.ohlc
.by
.height()
.range(start..end)
.fetch()?;
for ohlc in ohlcs.data {
let avg = (u64::from(*ohlc.open) + u64::from(*ohlc.close)) / 2;
let avg = Dollars::from(avg);
writeln!(writer, "{avg}").map_err(|e| brk_client::BrkError {
message: e.to_string(),
})?;
}
}
writer.flush().map_err(|e| brk_client::BrkError {
message: e.to_string(),
})?;
eprintln!("Done. Output in {OUTPUT_FILE}");
Ok(())
}