From 2c7cea378b36f9c6fcbc351dab9c66cd33718903 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 28 Apr 2025 16:03:52 -0400 Subject: [PATCH] Extract currently set title --- src/data.rs | 2 ++ src/parser.rs | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/data.rs b/src/data.rs index d45a34c..c1e4a3c 100644 --- a/src/data.rs +++ b/src/data.rs @@ -55,6 +55,8 @@ pub struct CharacterData { pub grand_company: GrandCompanyValue, #[serde(skip_serializing_if = "Option::is_none")] pub free_company: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub currencies: Option, diff --git a/src/parser.rs b/src/parser.rs index d4dbdec..ccb7846 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -43,6 +43,7 @@ const PORTRAIT_IMG_SELECTOR: &str = ".character__detail__image > a > img"; const NAMEDAY_SELECTOR: &str = ".character-block__birth"; const CLASSJOB_SELECTOR: &str = ".character__level__list > ul > li"; const FREE_COMPANY_SELECTOR: &str = ".character__freecompany__name > h4 > a"; +const TITLE_SELECTOR: &str = ".frame__chara__title"; /// Parses the HTML from `data` and returns `CharacterData`. The data may be incomplete. pub fn parse_lodestone(data: &str) -> CharacterData { @@ -54,6 +55,13 @@ pub fn parse_lodestone(data: &str) -> CharacterData { char_data.name = element.inner_html(); } + if let Some(title) = document + .select(&Selector::parse(TITLE_SELECTOR).unwrap()) + .nth(0) + { + char_data.title = Some(title.inner_html().as_str().to_string()); + } + for element in document.select(&Selector::parse(WORLD_DATA_CENTER_SELECTOR).unwrap()) { let re = Regex::new(r"(\w+)\s\[(\w+)\]").unwrap(); let inner_html = element.inner_html(); @@ -121,11 +129,11 @@ pub fn parse_lodestone(data: &str) -> CharacterData { } } - if let Some(block_name) = element + if let Some(free_company) = element .select(&Selector::parse(FREE_COMPANY_SELECTOR).unwrap()) .nth(0) { - char_data.free_company = Some(block_name.inner_html().as_str().to_string()); + char_data.free_company = Some(free_company.inner_html().as_str().to_string()); } }