Add functions to read bath names
This commit is contained in:
40
src/main.rs
40
src/main.rs
@@ -3,6 +3,8 @@ use axum::{
|
||||
Router,
|
||||
};
|
||||
|
||||
use regex::Regex;
|
||||
|
||||
use serde::{
|
||||
Deserialize,
|
||||
Serialize,
|
||||
@@ -27,6 +29,42 @@ struct TrafficDataItem {
|
||||
thresholds: Vec<TrafficDataThresholds>,
|
||||
}
|
||||
|
||||
struct BaederNames {
|
||||
id: String,
|
||||
name: String,
|
||||
}
|
||||
|
||||
async fn get_baeder_names() -> Result<Vec<BaederNames>, String> {
|
||||
let client = reqwest::Client::new();
|
||||
|
||||
let baedernames_req = client.get(String::from("https://www.berlinerbaeder.de/baeder/sommerbaeder-auslastung/"))
|
||||
.send().await
|
||||
.map_err(|_err| String::from("Cannot fetch baeder names"))?;
|
||||
|
||||
if baedernames_req.status() != reqwest::StatusCode::OK {
|
||||
return Err(String::from("Unexpected response from baeder names"));
|
||||
}
|
||||
|
||||
let baedernames_body = baedernames_req.text().await
|
||||
.map_err(|_err| "Cannot read body of baedernames")?;
|
||||
|
||||
let r = Regex::new(r#"<tr data-bath="(.+)" data-name="(.+)" data-address="#)
|
||||
.map_err(|_err| String::from("Cannot parse regex"))?;
|
||||
|
||||
let mut baedernames: Vec<BaederNames> = vec!{};
|
||||
|
||||
for c in r.captures_iter(baedernames_body.as_str()) {
|
||||
baedernames.push(BaederNames {
|
||||
id: c.get(1).unwrap().as_str().to_string(),
|
||||
name: c.get(2).unwrap().as_str().to_string(),
|
||||
})
|
||||
}
|
||||
|
||||
return Ok(baedernames);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
|
||||
@@ -53,6 +91,8 @@ async fn main() {
|
||||
}
|
||||
}
|
||||
|
||||
let baedernames = get_baeder_names().await;
|
||||
|
||||
let app = Router::new()
|
||||
.route("/", get(route_index))
|
||||
.route("/metrics", get(route_metrics));
|
||||
|
Reference in New Issue
Block a user