187 lines
4.4 KiB
Rust
187 lines
4.4 KiB
Rust
use lazy_static::lazy_static;
|
|
use scraper::{Html, Selector};
|
|
|
|
use crate::entry::Entry;
|
|
use crate::html::SelectExt;
|
|
use crate::probe::Probe;
|
|
|
|
lazy_static! {
|
|
static ref MESSAGE: Selector = Selector::parse(".CompanyResultListItem h3.name > a").unwrap();
|
|
static ref HISTORY_1: Selector =
|
|
Selector::parse("div.PhoneNoHit div.search-info-container p").unwrap();
|
|
static ref HISTORY_2: Selector =
|
|
Selector::parse("div.feedback-types div.feedback-type-item").unwrap();
|
|
}
|
|
|
|
fn from_html(document: &str) -> Result<Entry, ()> {
|
|
let html = Html::parse_document(document);
|
|
|
|
let mut messages = Vec::new();
|
|
let mut history = Vec::new();
|
|
let comments = Vec::new();
|
|
|
|
if let Some(message) = html
|
|
.select(&MESSAGE)
|
|
.next()
|
|
.map(|element| element.easy_text())
|
|
{
|
|
messages.push(message);
|
|
}
|
|
|
|
if let Some(message) = html
|
|
.select(&HISTORY_1)
|
|
.next()
|
|
.map(|element| element.easy_text())
|
|
{
|
|
history.push(message);
|
|
}
|
|
|
|
for message in html.select(&HISTORY_2).map(|element| element.easy_text()) {
|
|
history.push(message);
|
|
}
|
|
|
|
Ok(Entry {
|
|
messages,
|
|
history,
|
|
comments,
|
|
})
|
|
}
|
|
|
|
pub struct Eniro;
|
|
|
|
impl Probe for Eniro {
|
|
fn provider(&self) -> &'static str {
|
|
"eniro.se"
|
|
}
|
|
|
|
fn uri(&self, number: &str) -> String {
|
|
format!("https://gulasidorna.eniro.se/hitta:{}", number)
|
|
}
|
|
|
|
fn fetch(&self, number: &str) -> Result<String, ()> {
|
|
reqwest::get(&self.uri(number))
|
|
.map_err(|_| ())?
|
|
.text()
|
|
.map_err(|_| ())
|
|
}
|
|
|
|
fn parse(&self, data: &str) -> Result<Entry, ()> {
|
|
from_html(&data)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use insta::assert_yaml_snapshot_matches;
|
|
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_0104754350() {
|
|
let document = include_str!("../../fixtures/eniro/0104754350.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages:
|
|
- Företaget bedriver telefonförsäljning eller marknadsundersökningar
|
|
history: []
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0313908905() {
|
|
let document = include_str!("../../fixtures/eniro/0313908905.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages: []
|
|
history:
|
|
- 3464 denna vecka och 6637 totalt.
|
|
- 76 Försäljning
|
|
- 47 Oseriös verksamhet
|
|
- 37 Annat
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0702269893() {
|
|
let document = include_str!("../../fixtures/eniro/0702269893.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages:
|
|
- Anonym Kund För Refill
|
|
history: []
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0726443387() {
|
|
let document = include_str!("../../fixtures/eniro/0726443387.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages: []
|
|
history:
|
|
- 16 denna vecka och 98 totalt.
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0751793426() {
|
|
let document = include_str!("../../fixtures/eniro/0751793426.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages: []
|
|
history:
|
|
- 20 denna vecka och 602 totalt.
|
|
- 11 Försäljning
|
|
- 9 Annat
|
|
- 7 Oseriös verksamhet
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0751793483() {
|
|
let document = include_str!("../../fixtures/eniro/0751793483.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages: []
|
|
history:
|
|
- 29 denna vecka och 900 totalt.
|
|
- 5 Annat
|
|
- 4 Oseriös verksamhet
|
|
- 3 Marknadsföring
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0751793499() {
|
|
let document = include_str!("../../fixtures/eniro/0751793499.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages: []
|
|
history:
|
|
- 303 denna vecka och 304 totalt.
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0701807618() {
|
|
let document = include_str!("../../fixtures/eniro/0701807618.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages: []
|
|
history:
|
|
- 0 denna vecka och 1 totalt.
|
|
comments: []"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_0546780862() {
|
|
let document = include_str!("../../fixtures/eniro/0546780862.html");
|
|
|
|
assert_yaml_snapshot_matches!(from_html(&document), @r###"Ok:
|
|
messages:
|
|
- Nya Wermlands-Tidningens AB
|
|
history: []
|
|
comments: []"###);
|
|
}
|
|
}
|