1
Fork 0
mirror of https://github.com/redstrate/Auracite.git synced 2025-05-01 16:37:45 +00:00

Begin parsing free company, fix issue when parsing catgirls

This commit is contained in:
Joshua Goins 2025-04-28 15:47:00 -04:00
parent 0312725624
commit 75eca93f0d
3 changed files with 14 additions and 3 deletions

View file

@ -53,6 +53,8 @@ pub struct CharacterData {
pub tribe: TribeValue, pub tribe: TribeValue,
pub classjob_levels: Vec<ClassJobValue>, pub classjob_levels: Vec<ClassJobValue>,
pub grand_company: GrandCompanyValue, pub grand_company: GrandCompanyValue,
#[serde(skip_serializing_if = "Option::is_none")]
pub free_company: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub currencies: Option<Currencies>, pub currencies: Option<Currencies>,

View file

@ -42,6 +42,7 @@ const FACE_IMG_SELECTOR: &str = ".frame__chara__face > img";
const PORTRAIT_IMG_SELECTOR: &str = ".character__detail__image > a > img"; const PORTRAIT_IMG_SELECTOR: &str = ".character__detail__image > a > img";
const NAMEDAY_SELECTOR: &str = ".character-block__birth"; const NAMEDAY_SELECTOR: &str = ".character-block__birth";
const CLASSJOB_SELECTOR: &str = ".character__level__list > ul > li"; 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. /// Parses the HTML from `data` and returns `CharacterData`. The data may be incomplete.
pub fn parse_lodestone(data: &str) -> CharacterData { 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()) .select(&Selector::parse(CHARACTER_BLOCK_NAME_SELECTOR).unwrap())
.nth(0) .nth(0)
{ {
let re = Regex::new(r"(\w+)<br>(\w+)\s\/\s(\W)").unwrap(); let re = Regex::new(r"([^<]+)<br>([^\/]+)\s\/\s(\W)").unwrap();
let inner_html = block_name.inner_html(); let inner_html = block_name.inner_html();
dbg!(&inner_html);
let captures = re.captures(&inner_html).unwrap(); let captures = re.captures(&inner_html).unwrap();
char_data.race = 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()) { for element in document.select(&Selector::parse(FACE_IMG_SELECTOR).unwrap()) {

View file

@ -179,7 +179,7 @@ impl TryFrom<&str> for RaceValue {
"Hyur" => 1, "Hyur" => 1,
"Elezen" => 2, "Elezen" => 2,
"Lalafell" => 3, "Lalafell" => 3,
"Miqote" => 4, "Miqo'te" => 4,
"Roegadyn" => 5, "Roegadyn" => 5,
"AuRa" => 6, "AuRa" => 6,
"Hrothgar" => 7, "Hrothgar" => 7,
@ -214,7 +214,7 @@ impl TryFrom<&str> for TribeValue {
"Plainsfolk" => 5, "Plainsfolk" => 5,
"Dunesfolk" => 6, "Dunesfolk" => 6,
"Seeker" => 7, "Seeker" => 7,
"Keeper" => 8, "Keeper of the Moon" => 8,
"SeaWolf" => 9, "SeaWolf" => 9,
"Hellsguard" => 10, "Hellsguard" => 10,
"Raen" => 11, "Raen" => 11,