feat: adapt to db api's new line number format

This commit is contained in:
mark
2025-12-15 09:35:19 +01:00
parent 1d4ba20039
commit 55e95708ee
2 changed files with 29 additions and 16 deletions

View File

@@ -33,8 +33,12 @@ pub struct DeparturesMerklingen1 {
pub struct DeparturesMerklingen4 { pub struct DeparturesMerklingen4 {
#[serde(rename = "linienNummer")] #[serde(rename = "linienNummer")]
pub line_number: Option<String>, pub line_number: Option<String>,
#[serde(rename = "kurzText")] // #[serde(rename = "kurzText")]
pub product: Option<String>, // pub text_short: Option<String>,
#[serde(rename = "mittelText")]
pub text_medium: Option<String>,
// #[serde(rename = "langText")]
// pub text_long: Option<String>,
} }
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct DeparturesMerklingen2 { pub struct DeparturesMerklingen2 {
@@ -55,12 +59,23 @@ pub async fn departures_merklingen() -> Result<DeparturesMerklingen, String> {
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"#; 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 { match reqwest::get(url).await {
Ok(response) => match response.text().await { Ok(response) => match response.text().await {
Ok(response) => match serde_json::from_str::<DeparturesMerklingen>(&response) { Ok(response) => {
Ok(response) => Ok(response), #[cfg(debug_assertions)]
Err(e) => Err(format!( eprintln!(
"Couldn't parse HTTP response from URL {url:?}: {e}\nResponse was (raw):\n{response}" "|> GET {url}\n| {}\n",
))?, serde_json::from_str::<serde_json::Value>(&response)
}, .and_then(|v| serde_json::to_string_pretty(&v))
.unwrap_or(response.clone())
.trim()
.replace("\n", "\n| ")
);
match serde_json::from_str::<DeparturesMerklingen>(&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 get HTTP response from URL {url:?}: {e}"))?,
}, },
Err(e) => Err(format!("Couldn't make GET request to URL {url:?}: {e}"))?, Err(e) => Err(format!("Couldn't make GET request to URL {url:?}: {e}"))?,

View File

@@ -125,15 +125,13 @@ async fn index(
.line_name .line_name
.as_ref() .as_ref()
.map(|v| { .map(|v| {
v.product.as_ref().map(|prod| { v.text_medium
format!( .as_ref()
"{prod} {}", .map(|v| v.as_str())
v.line_number.as_ref().map(|v| v.as_str()).unwrap_or("?") .or(v.line_number.as_ref().map(|v| v.as_str()))
)
})
}) })
.flatten() .flatten()
.unwrap_or_else(|| "[RE ?]".to_owned()); .unwrap_or("[RE ?]");
let is_ulm = { let is_ulm = {
if let Some(destination) = departure.destination.as_ref() { if let Some(destination) = departure.destination.as_ref() {
let name = destination.to_lowercase(); let name = destination.to_lowercase();
@@ -152,7 +150,7 @@ async fn index(
} }
} }
.or_else(|| { .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("1") => Some(true),
Some("4") => Some(false), Some("4") => Some(false),
_ => None, _ => None,