mirror of
https://codeberg.org/icewind/ugc-scaper.git
synced 2026-06-03 10:14:11 +02:00
handle empty name changes
This commit is contained in:
parent
0d2eb1ee54
commit
bee06f18f9
6 changed files with 4071 additions and 5 deletions
|
|
@ -48,6 +48,17 @@ fn select_text<'a>(el: ElementRef<'a>, selector: &Selector) -> Option<&'a str> {
|
||||||
.map(str::trim)
|
.map(str::trim)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn select_text_empty<'a>(el: ElementRef<'a>, selector: &Selector) -> Option<&'a str> {
|
||||||
|
el.select(selector)
|
||||||
|
.next()
|
||||||
|
.map(|item| {
|
||||||
|
item.text()
|
||||||
|
.find(|s| !s.trim().is_empty())
|
||||||
|
.unwrap_or_default()
|
||||||
|
})
|
||||||
|
.map(str::trim)
|
||||||
|
}
|
||||||
|
|
||||||
fn select_last_text<'a>(el: ElementRef<'a>, selector: &Selector) -> Option<&'a str> {
|
fn select_last_text<'a>(el: ElementRef<'a>, selector: &Selector) -> Option<&'a str> {
|
||||||
el.select(selector)
|
el.select(selector)
|
||||||
.next()
|
.next()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use super::{ElementExt, Parser};
|
use super::{select_text_empty, ElementExt, Parser};
|
||||||
use crate::data::{Membership, NameChange, Record, Team};
|
use crate::data::{Membership, NameChange, Record, Team};
|
||||||
use crate::parser::{
|
use crate::parser::{
|
||||||
select_text, steam_id_from_link, DATE_FORMAT, MEMBER_DATE_ALT_FORMAT, MEMBER_DATE_FORMAT,
|
select_text, steam_id_from_link, DATE_FORMAT, MEMBER_DATE_ALT_FORMAT, MEMBER_DATE_FORMAT,
|
||||||
|
|
@ -320,17 +320,17 @@ impl Parser for TeamParser {
|
||||||
.map(|row| {
|
.map(|row| {
|
||||||
let from_tag =
|
let from_tag =
|
||||||
select_text(row, &self.selector_team_name_from_tag).unwrap_or_default();
|
select_text(row, &self.selector_team_name_from_tag).unwrap_or_default();
|
||||||
let from_name = select_text(row, &self.selector_team_name_from_name).ok_or(
|
let from_name = select_text_empty(row, &self.selector_team_name_from_name).ok_or(
|
||||||
ParseError::ElementNotFound {
|
ParseError::ElementNotFound {
|
||||||
selector: SELECTOR_TEAM_NAME_FROM_NAME,
|
selector: SELECTOR_TEAM_NAME_FROM_NAME,
|
||||||
role: "team name change from name",
|
role: "team name change from name",
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
let to_tag = select_text(row, &self.selector_team_name_to_tag).unwrap_or_default();
|
let to_tag = select_text(row, &self.selector_team_name_to_tag).unwrap_or_default();
|
||||||
let to_name = select_text(row, &self.selector_team_name_to_name).ok_or(
|
let to_name = select_text_empty(row, &self.selector_team_name_to_name).ok_or(
|
||||||
ParseError::ElementNotFound {
|
ParseError::ElementNotFound {
|
||||||
selector: SELECTOR_TEAM_NAME_TO_NAME,
|
selector: SELECTOR_TEAM_NAME_TO_NAME,
|
||||||
role: "team name change from name",
|
role: "team name change to name",
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
let date = select_text(row, &self.selector_team_name_date).ok_or(
|
let date = select_text(row, &self.selector_team_name_date).ok_or(
|
||||||
|
|
|
||||||
3959
tests/data/team_5058.html
Normal file
3959
tests/data/team_5058.html
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -39,6 +39,7 @@ fn test_parse_player_details_html(input: &str, name: &str) {
|
||||||
#[test_case("team_10763.html", "team_na_4v4")]
|
#[test_case("team_10763.html", "team_na_4v4")]
|
||||||
#[test_case("team_3975.html", "team_empty_player")]
|
#[test_case("team_3975.html", "team_empty_player")]
|
||||||
#[test_case("team_2909.html", "team_1v1_sol")]
|
#[test_case("team_2909.html", "team_1v1_sol")]
|
||||||
|
#[test_case("team_5058.html", "team_empty_name_change2")]
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
fn test_parse_team_html(input: &str, name: &str) {
|
fn test_parse_team_html(input: &str, name: &str) {
|
||||||
let body = read_to_string(format!("tests/data/{input}")).unwrap();
|
let body = read_to_string(format!("tests/data/{input}")).unwrap();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
---
|
||||||
|
source: tests/snapshot.rs
|
||||||
|
expression: parsed
|
||||||
|
---
|
||||||
|
{
|
||||||
|
"name": "Forest of BEARs",
|
||||||
|
"tag": "||BEAR||",
|
||||||
|
"image": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/4b/4b44f0549a072bb80829de501ed5f4475a4f6057.jpg",
|
||||||
|
"format": "9v9",
|
||||||
|
"region": "north-america",
|
||||||
|
"timezone": null,
|
||||||
|
"steam_group": null,
|
||||||
|
"division": "NA Steel",
|
||||||
|
"description": "",
|
||||||
|
"titles": [],
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"name": "Brave Toaster",
|
||||||
|
"steam_id": "76561198048460099",
|
||||||
|
"role": "leader",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Smamp",
|
||||||
|
"steam_id": "76561198024029524",
|
||||||
|
"role": "leader",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Bammey",
|
||||||
|
"steam_id": "76561198013984831",
|
||||||
|
"role": "leader",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stalphy",
|
||||||
|
"steam_id": "76561198037765614",
|
||||||
|
"role": "member",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "alex fünke",
|
||||||
|
"steam_id": "76561198004769212",
|
||||||
|
"role": "member",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AndyHUNGRY Darkpro",
|
||||||
|
"steam_id": "76561198045789913",
|
||||||
|
"role": "member",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "audoo",
|
||||||
|
"steam_id": "76561198037724858",
|
||||||
|
"role": "member",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "A Light Green Coat",
|
||||||
|
"steam_id": "76561198039469761",
|
||||||
|
"role": "member",
|
||||||
|
"since": "+002012-09-04T00:00:00.000000000Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tiny",
|
||||||
|
"steam_id": "76561198054203986",
|
||||||
|
"role": "member",
|
||||||
|
"since": "+002012-10-03T00:00:00.000000000Z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"season": 8,
|
||||||
|
"division": "NA Iron",
|
||||||
|
"wins": 5,
|
||||||
|
"losses": 4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name_changes": [
|
||||||
|
{
|
||||||
|
"from_tag": "||BEAR||",
|
||||||
|
"from": "",
|
||||||
|
"to_tag": "||BEAR||",
|
||||||
|
"to": "Forest of BEARs",
|
||||||
|
"date": "2012-09-17"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_tag": "||BEAR||",
|
||||||
|
"from": "Forest of BEARs",
|
||||||
|
"to_tag": "||BEAR||",
|
||||||
|
"to": "",
|
||||||
|
"date": "2012-09-15"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -392,7 +392,6 @@ impl GameMode {
|
||||||
GameMode::Sixes => true,
|
GameMode::Sixes => true,
|
||||||
GameMode::Fours => true,
|
GameMode::Fours => true,
|
||||||
GameMode::Ultiduo => true,
|
GameMode::Ultiduo => true,
|
||||||
GameMode::Ones => true,
|
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue