From 91f2e4213c342bba4d20f0f9aa3794ac2696b611 Mon Sep 17 00:00:00 2001 From: mark <> Date: Mon, 15 Dec 2025 09:35:19 +0100 Subject: [PATCH] feat: adapt to db api's new line number format --- src/bahnhof.rs | 29 ++++++++++++++++++++++------- src/main.rs | 14 ++++++-------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/bahnhof.rs b/src/bahnhof.rs index a6ec1c3..100b9c7 100644 --- a/src/bahnhof.rs +++ b/src/bahnhof.rs @@ -34,7 +34,11 @@ pub struct DeparturesMerklingen4 { #[serde(rename = "linienNummer")] pub line_number: Option, #[serde(rename = "kurzText")] - pub product: Option, + pub text_short: Option, + #[serde(rename = "mittelText")] + pub text_medium: Option, + #[serde(rename = "langText")] + pub text_long: Option, } #[derive(Deserialize)] pub struct DeparturesMerklingen2 { @@ -55,12 +59,23 @@ pub async fn departures_merklingen() -> Result { let url = r#"https://www.bahn.de/web/api/reiseloesung/abfahrten?ortExtId=8003983&mitVias=true&maxVias=8&verkehrsmittel[]=ICE&verkehrsmittel[]=EC_IC&verkehrsmittel[]=IR&verkehrsmittel[]=REGIONAL&verkehrsmittel[]=SBAHN"#; match reqwest::get(url).await { Ok(response) => match response.text().await { - Ok(response) => match serde_json::from_str::(&response) { - Ok(response) => Ok(response), - Err(e) => Err(format!( - "Couldn't parse HTTP response from URL {url:?}: {e}\nResponse was (raw):\n{response}" - ))?, - }, + Ok(response) => { + #[cfg(debug_assertions)] + eprintln!( + "|> GET {url}\n| {}\n", + serde_json::from_str::(&response) + .and_then(|v| serde_json::to_string_pretty(&v)) + .unwrap_or(response.clone()) + .trim() + .replace("\n", "\n| ") + ); + match serde_json::from_str::(&response) { + Ok(response) => Ok(response), + Err(e) => Err(format!( + "Couldn't parse HTTP response from URL {url:?}: {e}\nResponse was (raw):\n{response}" + ))?, + } + } Err(e) => Err(format!("Couldn't get HTTP response from URL {url:?}: {e}"))?, }, Err(e) => Err(format!("Couldn't make GET request to URL {url:?}: {e}"))?, diff --git a/src/main.rs b/src/main.rs index a546200..adc8a31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -125,15 +125,13 @@ async fn index( .line_name .as_ref() .map(|v| { - v.product.as_ref().map(|prod| { - format!( - "{prod} {}", - v.line_number.as_ref().map(|v| v.as_str()).unwrap_or("?") - ) - }) + v.text_medium + .as_ref() + .map(|v| v.as_str()) + .or(v.line_number.as_ref().map(|v| v.as_str())) }) .flatten() - .unwrap_or_else(|| "[RE ?]".to_owned()); + .unwrap_or("[RE ?]"); let is_ulm = { if let Some(destination) = departure.destination.as_ref() { let name = destination.to_lowercase(); @@ -152,7 +150,7 @@ async fn index( } } .or_else(|| { - match departure.platform_schedule.as_ref().map(|v| v.as_str()) { + match departure.platform_schedule.as_ref().map(|v| v.trim()) { Some("1") => Some(true), Some("4") => Some(false), _ => None,