use crate::error::XKCDResult;
use scraper::{Html, Selector};
use std::collections::HashMap;
use std::iter::FromIterator;
static ARCHIVE_URL: &str = "https://xkcd.com/archive/";
/// Returns the xkcd archive list
pub async fn get_archive() -> XKCDResult> {
let response = reqwest::get(ARCHIVE_URL).await?;
let html = response.text().await?;
parse_archive_list(html)
}
fn parse_archive_list(html: String) -> XKCDResult> {
let document = Html::parse_document(&html);
let archive_selector = Selector::parse(r#"#middleContainer > a"#).unwrap();
let archive = HashMap::from_iter(document.select(&archive_selector).filter_map(|element| {
Some((
element.inner_html(),
element
.value()
.attr("href")?
.replace("/", "")
.parse::()
.ok()?,
))
}));
Ok(archive)
}