diff --git a/src/providers/noodlemagazine.rs b/src/providers/noodlemagazine.rs index cee1491..7980876 100644 --- a/src/providers/noodlemagazine.rs +++ b/src/providers/noodlemagazine.rs @@ -498,13 +498,26 @@ impl NoodlemagazineProvider { let video_url = format!("{}{}", self.url, href); + // The title div now carries extra attributes + // (`
`), so match the class + // and skip to the tag end; fall back to the thumbnail `alt`, which + // holds the same text. let mut title = video_segment - .split("
") + .split("
')) + .and_then(|(_, rest)| rest.split('<').next()) + .map(|t| t.trim().to_string()) + .filter(|t| !t.is_empty()) + .or_else(|| { + video_segment + .split("alt=\"") + .nth(1) + .and_then(|s| s.split('"').next()) + .map(|t| t.trim().to_string()) + .filter(|t| !t.is_empty()) + }) + .unwrap_or_default(); title = decode(title.as_bytes()) .to_string() @@ -671,6 +684,30 @@ mod tests { assert_eq!(items[0].formats.as_ref().map(|f| f.len()), Some(1)); } + #[test] + fn parses_title_when_title_div_has_extra_attributes() { + let provider = NoodlemagazineProvider::new(); + let options = options(); + let html = r##" + + "##; + + let items = provider.get_video_items_from_html(html.to_string(), &options); + + assert_eq!(items.len(), 1); + assert_eq!(items[0].title, "The Girl & Her Lover"); + assert_eq!(items[0].duration, 295); + } + #[test] fn keeps_https_cdn_thumbs_but_drops_non_images() { let provider = NoodlemagazineProvider::new();