From 75eca93f0d424c80e4a24c9202d73ed3e6297ad3 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 28 Apr 2025 15:47:00 -0400 Subject: [PATCH] Begin parsing free company, fix issue when parsing catgirls --- src/data.rs | 2 ++ src/parser.rs | 11 ++++++++++- src/value.rs | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/data.rs b/src/data.rs index b2d6a81..d45a34c 100644 --- a/src/data.rs +++ b/src/data.rs @@ -53,6 +53,8 @@ pub struct CharacterData { pub tribe: TribeValue, pub classjob_levels: Vec, pub grand_company: GrandCompanyValue, + #[serde(skip_serializing_if = "Option::is_none")] + pub free_company: Option, #[serde(skip_serializing_if = "Option::is_none")] pub currencies: Option, diff --git a/src/parser.rs b/src/parser.rs index 43eefd4..467ec9c 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -42,6 +42,7 @@ const FACE_IMG_SELECTOR: &str = ".frame__chara__face > img"; 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 > p"; /// Parses the HTML from `data` and returns `CharacterData`. The data may be incomplete. pub fn parse_lodestone(data: &str) -> CharacterData { @@ -73,8 +74,9 @@ pub fn parse_lodestone(data: &str) -> CharacterData { .select(&Selector::parse(CHARACTER_BLOCK_NAME_SELECTOR).unwrap()) .nth(0) { - let re = Regex::new(r"(\w+)
(\w+)\s\/\s(\W)").unwrap(); + let re = Regex::new(r"([^<]+)
([^\/]+)\s\/\s(\W)").unwrap(); let inner_html = block_name.inner_html(); + dbg!(&inner_html); let captures = re.captures(&inner_html).unwrap(); char_data.race = @@ -119,6 +121,13 @@ pub fn parse_lodestone(data: &str) -> CharacterData { } } } + + if let Some(block_name) = element + .select(&Selector::parse(FREE_COMPANY_SELECTOR).unwrap()) + .nth(0) + { + char_data.free_company = Some(block_name.inner_html().as_str().to_string()); + } } for element in document.select(&Selector::parse(FACE_IMG_SELECTOR).unwrap()) { diff --git a/src/value.rs b/src/value.rs index f918184..72677e7 100644 --- a/src/value.rs +++ b/src/value.rs @@ -179,7 +179,7 @@ impl TryFrom<&str> for RaceValue { "Hyur" => 1, "Elezen" => 2, "Lalafell" => 3, - "Miqote" => 4, + "Miqo'te" => 4, "Roegadyn" => 5, "AuRa" => 6, "Hrothgar" => 7, @@ -214,7 +214,7 @@ impl TryFrom<&str> for TribeValue { "Plainsfolk" => 5, "Dunesfolk" => 6, "Seeker" => 7, - "Keeper" => 8, + "Keeper of the Moon" => 8, "SeaWolf" => 9, "Hellsguard" => 10, "Raen" => 11,