hoards iqair data
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..364713b
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,52 @@
+use std::{
+ env::args,
+ thread::sleep,
+ time::{Duration, SystemTime},
+};
+fn main() {
+ if matches!(
+ args().nth(1).as_deref(),
+ Some("--help" | "-h" | "help" | "h")
+ ) {
+ println!("{} [OUTFILE] (KEY | env[AIR_KEY])", args().next().unwrap());
+ std::process::exit(0);
+ }
+ let Some(output) = args().nth(1) else {
+ println!("\x1b[31;1mno output file provided!\x1b[0m");
+ std::process::exit(0);
+ };
+ let Some(key) = args().nth(2).or(std::env::var("AIR_KEY").ok()) else {
+ println!("\x1b[31;1mno key provided!\x1b[0m");
+ println!("get one at https://dashboard.iqair.com/personal/api-keys for free");
+ println!("then set AIR_KEY or pass it to this binary");
+ std::process::exit(0);
+ };
+
+ loop {
+ let mut result = iqair::nearest(&key);
+ while result.is_err() {
+ result = iqair::nearest(&key);
+ sleep(Duration::from_secs(5 * 60));
+ }
+ let result = result.unwrap();
+ let mut f = std::fs::OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open(&output)
+ .expect("file accessible");
+ let json = serde_json::to_string(&result.current).unwrap();
+ use std::io::Write;
+ writeln!(f, "{json}").unwrap();
+ f.flush().unwrap();
+ drop(f);
+
+ let unix = SystemTime::now()
+ .duration_since(SystemTime::UNIX_EPOCH)
+ .unwrap()
+ .as_secs();
+ // see you next hour
+ let next = 65 * 60 - (unix % (60 * 60));
+ println!("sleeping {} minutes...", next / 60);
+ sleep(Duration::from_secs(next));
+ }
+}