nako-metadata-scraper 0.1.0-alpha.2

Official Nako metadata scraper Addon Sidecar.
Documentation
use crate::engine::{MetadataQuery, ProviderMetadataCandidate};

use super::{
    DOUBAN_DETAIL_ENRICHMENT_LIMIT, DoubanMetadataProvider,
    parser::{parse_detail_page, parse_search_results},
};

impl<T> DoubanMetadataProvider<T>
where
    T: crate::providers::http_runtime::ProviderHttpTransport,
{
    pub(super) async fn suggest_candidates(
        &self,
        query: &MetadataQuery,
    ) -> anyhow::Result<Vec<ProviderMetadataCandidate>> {
        let search = self.render(self.search_url(&query.title)).await?;
        let search_results = parse_search_results(&search.html);
        let mut candidates = Vec::new();

        for result in search_results
            .into_iter()
            .take(DOUBAN_DETAIL_ENRICHMENT_LIMIT)
        {
            let detail = self.render(result.url.clone()).await?;
            if let Some(detail) = parse_detail_page(&detail.html, &result, query) {
                candidates.push(detail.into_candidate(query));
            }
        }

        Ok(candidates)
    }
}