From 5a1d428c22ae2075c8b9e0b56391c65275f0f1f6 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Tue, 22 Jan 2019 12:00:12 +0100 Subject: [PATCH] Clean up output, and fix more tests. --- src/probe/eniro.rs | 33 +++++++----------- src/probe/telefonforsaljare.rs | 29 +++++++++++----- src/probe/vem_ringde.rs | 61 +++++++++++----------------------- 3 files changed, 51 insertions(+), 72 deletions(-) diff --git a/src/probe/eniro.rs b/src/probe/eniro.rs index 8e4286b..b936f53 100644 --- a/src/probe/eniro.rs +++ b/src/probe/eniro.rs @@ -22,7 +22,13 @@ fn from_html(document: &str) -> Result { let selector = Selector::parse("div.PhoneNoHit div.search-info-container p").unwrap(); if let Some(element) = html.select(&selector).next() { - let message = element.inner_html(); + let message = element + .text() + .map(str::trim) + .filter(|s| !s.is_empty()) + .collect::>() + .join(" "); + let message = htmlescape::decode_html(&message).unwrap(); history.push(message); @@ -94,10 +100,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![ - "3464 denna vecka och 6637 totalt. " - .to_string(), - ], + history: vec!["3464 denna vecka och 6637 totalt.".to_string()], comments: vec![], }; @@ -123,10 +126,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![ - "16 denna vecka och 98 totalt. " - .to_string(), - ], + history: vec!["16 denna vecka och 98 totalt.".to_string()], comments: vec![], }; @@ -139,10 +139,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![ - "20 denna vecka och 602 totalt. " - .to_string(), - ], + history: vec!["20 denna vecka och 602 totalt.".to_string()], comments: vec![], }; @@ -155,10 +152,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![ - "29 denna vecka och 900 totalt. " - .to_string(), - ], + history: vec!["29 denna vecka och 900 totalt.".to_string()], comments: vec![], }; @@ -171,10 +165,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![ - "303 denna vecka och 304 totalt. " - .to_string(), - ], + history: vec!["303 denna vecka och 304 totalt.".to_string()], comments: vec![], }; diff --git a/src/probe/telefonforsaljare.rs b/src/probe/telefonforsaljare.rs index 1771dad..02cafe3 100644 --- a/src/probe/telefonforsaljare.rs +++ b/src/probe/telefonforsaljare.rs @@ -33,10 +33,21 @@ fn from_html(document: &str) -> Result { let mut history = Vec::new(); - let selector = Selector::parse("#content p:nth-child(5)").unwrap(); + let selector = if messages.is_empty() { + Selector::parse("#content p:nth-child(4)").unwrap() + } else { + Selector::parse("#content p:nth-child(5)").unwrap() + }; if let Some(element) = html.select(&selector).next() { - history.push(element.inner_html()); + let message = element + .text() + .map(str::trim) + .filter(|s| !s.is_empty()) + .collect::>() + .join(" "); + + history.push(message); } let mut comments = Vec::new(); @@ -128,7 +139,7 @@ mod tests { let expected = Entry { messages: vec!["Folksam".to_string()], - history: vec!["De senaste 24 timmarna har 9 personer sökt efter numret 0104754350. Det kan tyda på att numret används av telefonförsäljare. Totalt har minst 4786 personer sökt efter numret.".to_string()], + history: vec!["De senaste 24 timmarna har 9 personer sökt efter numret 0104754350. Det kan tyda på att numret används av telefonförsäljare. Totalt har minst 4786 personer sökt efter numret.".to_string()], comments: vec![ Comment { datetime: "2018-05-09T12:31:39Z".parse::>().unwrap(), @@ -172,7 +183,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![], + history: vec!["Du är den första de senaste 24 timmarna som söker efter detta nummer. Det tyder på att numret inte används av telefonförsäljare. Totalt har minst 301 personer sökt efter numret.".to_string()], comments: vec![], }; @@ -185,7 +196,7 @@ mod tests { let expected = Entry { messages: vec!["Alnö Design & Produktion AB".to_string()], - history: vec!["De senaste 24 timmarna har 3 personer sökt efter numret 0702269893. Det kan tyda på att numret används av telefonförsäljare. Totalt har minst 4 personer sökt efter numret.".to_string()], + history: vec!["De senaste 24 timmarna har 3 personer sökt efter numret 0702269893. Det kan tyda på att numret används av telefonförsäljare. Totalt har minst 4 personer sökt efter numret.".to_string()], comments: vec![ Comment { datetime: "2019-01-18T13:30:55Z".parse::>().unwrap(), @@ -204,7 +215,7 @@ mod tests { let expected = Entry { messages: vec!["Tele2".to_string()], - history: vec!["De senaste 24 timmarna har 1 personer sökt efter numret 0726443387. Det kan tyda på att numret används av telefonförsäljare. Totalt har minst 231 personer sökt efter numret.".to_string()], + history: vec!["De senaste 24 timmarna har 1 personer sökt efter numret 0726443387. Det kan tyda på att numret används av telefonförsäljare. Totalt har minst 231 personer sökt efter numret.".to_string()], comments: vec![ Comment { datetime: "2018-10-31T17:48:27Z".parse::>().unwrap(), @@ -223,7 +234,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![], + history: vec!["Du är den första de senaste 24 timmarna som söker efter detta nummer. Det tyder på att numret inte används av telefonförsäljare. Totalt har minst 38 personer sökt efter numret.".to_string()], comments: vec![], }; @@ -236,7 +247,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![], + history: vec!["Du är den första de senaste 24 timmarna som söker efter detta nummer. Det tyder på att numret inte används av telefonförsäljare. Totalt har minst 25 personer sökt efter numret.".to_string()], comments: vec![], }; @@ -249,7 +260,7 @@ mod tests { let expected = Entry { messages: vec![], - history: vec![], + history: vec!["Du är den första de senaste 24 timmarna som söker efter detta nummer. Det tyder på att numret inte används av telefonförsäljare. Totalt har minst 22 personer sökt efter numret.".to_string()], comments: vec![], }; diff --git a/src/probe/vem_ringde.rs b/src/probe/vem_ringde.rs index 2decda0..61a0c01 100644 --- a/src/probe/vem_ringde.rs +++ b/src/probe/vem_ringde.rs @@ -1,25 +1,36 @@ +use std::str; + // use log::debug; -// use scraper::{Html, Selector}; +use scraper::{Html, Selector}; use crate::context::Context; use crate::probe::{Entry, Probe}; -fn from_html(_document: &str) -> Result { - /* +fn from_html(document: &str) -> Result { let html = Html::parse_document(document); - let messages = Vec::new(); + let mut messages = Vec::new(); let history = Vec::new(); let comments = Vec::new(); + let selector = Selector::parse("#toporganisations li").unwrap(); + + for element in html.select(&selector) { + let message = element + .text() + .map(str::trim) + .filter(|s| !s.is_empty()) + .collect::>() + .join(" "); + + messages.push(message); + } + Ok(Entry { messages, history, comments, }) - */ - - Err(()) } pub struct VemRingde; @@ -50,40 +61,6 @@ impl Probe for VemRingde { } Err(_) => Err(()), } - - /* - if let Ok(page) = Page::from_html(&body) { - if !page.owners.is_empty() { - println!(" ägare:"); - - for owner in &page.owners { - println!(" * {} - {}", owner.title, owner.calls); - } - } - - if !page.calls.is_empty() { - if !page.owners.is_empty() { - println!(); - } - - println!(" samtal:"); - - for call in &page.calls { - println!(" * {}: {}", call.date, call.who); - } - } - - if page.owners.is_empty() && page.calls.is_empty() { - println!(" Inga samtal från {}", number); - } - } else { - if let Err(error) = Page::from_html(&body) { - debug!("vemringde: failed to parse page: {:#?}", error); - } - - println!(" Failed to find any data"); - } - */ } } @@ -98,7 +75,7 @@ mod tests { let document = include_str!("../../fixtures/vemringde/0104754350.html"); let expected = Entry { - messages: vec![], + messages: vec!["Folksam (5 samtal)".to_string()], history: vec![], comments: vec![], };