This commit is contained in:
lelgenio 2025-09-26 22:20:08 -03:00
parent 406d664697
commit de5a55298f
3 changed files with 441 additions and 307 deletions

File diff suppressed because one or more lines are too long

View file

@ -26,6 +26,11 @@ impl TimeSince {
pub async fn get(state: State<AppState>) -> HomeTemplate {
let mut t = vec![];
let client = reqwest::Client::builder()
.user_agent("warthunder_leak_counter.lelgenio.com")
.build()
.unwrap();
for source in sources::sources() {
let url = source.url();
@ -54,12 +59,21 @@ pub async fn get(state: State<AppState>) -> HomeTemplate {
if needs_update {
tracing::info!("Need update cache");
let Ok(res) = (reqwest::get(url.clone())).await else {
let Ok(res) = (client.get(url.clone())).send().await else {
tracing::error!("fetch error");
continue;
};
let Ok(text) = res.text().await else {
let status = res.status();
let text = res.text().await;
if !status.is_success() {
tracing::error!("fetch returned status {status}");
tracing::error!("response body {text:?}");
continue;
}
let Ok(text) = text else {
tracing::error!("fetch decode text error");
continue;
};
@ -73,9 +87,12 @@ pub async fn get(state: State<AppState>) -> HomeTemplate {
continue;
};
let Ok(last) = source.latest_leak(text) else {
tracing::error!("source decode error");
continue;
let last = match source.latest_leak(text) {
Ok(last) => last,
Err(err) => {
tracing::error!("source decode error: {err:#?}");
continue;
}
};
t.push(last);

View file

@ -12,10 +12,11 @@ impl Source for Wikipedia {
"https://en.wikipedia.org/wiki/War_Thunder".to_string()
}
#[tracing::instrument(skip_all, err)]
fn latest_leak(&self, html: &str) -> Result<time::Date> {
let soup = soup::Soup::new(html);
let tables = soup.tag("table").find_all();
let tables: Vec<_> = soup.tag("table").find_all().collect();
let tables_with_classified = tables
.into_iter()
@ -23,8 +24,9 @@ impl Source for Wikipedia {
.collect::<Vec<_>>();
let table = match &tables_with_classified[..] {
[] => bail!("No tables found"),
[table] => table,
_ => bail!("Cannot reliably find leaks table"),
_ => bail!("Found more than one table with the string Classified"),
};
let lines: Vec<String> = table
@ -83,7 +85,7 @@ fn test_wikipedia_html_parse() {
let html = std::fs::read_to_string("./data/wikipedia.html").unwrap();
let real = Wikipedia.latest_leak(&html).unwrap();
let expected = time::Date::from_calendar_date(2023, time::Month::December, 12).unwrap();
let expected = time::Date::from_calendar_date(2025, time::Month::June, 23).unwrap();
assert_eq!(expected, real);
}