{"record":{"id":"7c2251be0eed3532","repo":"tonhowtf/omniget","slug":"nao-encontrei-slides-nessa-pagina-o-slideshare-pode-ter","errorCode":null,"errorMessage":"nao encontrei slides nessa pagina (o SlideShare pode ter mudado o HTML ou o deck e privado)","messagePattern":"nao encontrei slides nessa pagina \\(o SlideShare pode ter mudado o HTML ou o deck e privado\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/slides.rs","lineNumber":100,"sourceCode":"pub async fn download(\n    url: &str,\n    dest_dir: &str,\n    progress: super::ProgressFn,\n) -> anyhow::Result<SlidesResult> {\n    if !url.contains(\"slideshare.net\") {\n        return Err(anyhow!(\"cole um link do slideshare.net\"));\n    }\n    let client = super::client()?;\n    let html = client\n        .get(url)\n        .send()\n        .await?\n        .error_for_status()?\n        .text()\n        .await?;\n    let urls = parse_slide_urls(&html);\n    if urls.is_empty() {\n        return Err(anyhow!(\"nao encontrei slides nessa pagina (o SlideShare pode ter mudado o HTML ou o deck e privado)\"));\n    }\n    let title = og_title(&html).unwrap_or_else(|| \"slideshare\".to_string());\n    let work = super::temp_dir().join(format!(\"slides-{}\", uuid::Uuid::new_v4()));\n    std::fs::create_dir_all(&work)?;\n    let mut images = Vec::with_capacity(urls.len());\n    let id = format!(\"slides:{}\", url);\n    for (i, u) in urls.iter().enumerate() {\n        super::report(\n            &progress,\n            &id,\n            \"download\",\n            i as u64,\n            Some(urls.len() as u64),\n            None,\n        );\n        let data = client\n            .get(u)\n            .send()","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/slides.rs#L82-L118","documentation":"Thrown when the SlideShare page was fetched successfully (HTTP 2xx) but `parse_slide_urls(&html)` found zero image URLs in the markup. It means the scraper's HTML heuristics no longer match SlideShare's markup, or the page genuinely contains no extractable slides (private/deleted deck).","triggerScenarios":"Calling `slides::download` with a valid slideshare.net URL whose HTML yields an empty slide-URL list: private decks, deleted decks, region/login-walled pages, or SlideShare HTML changes that break `parse_slide_urls`.","commonSituations":"Deck made private after sharing; deck deleted; SlideShare redesign changing image URL attributes; consent/cookie wall HTML returned instead of the deck; bot-protection page served to the HTTP client.","solutions":["Verify the deck is public by opening the URL in an incognito browser; if private, request access or use another deck.","Check if SlideShare changed its HTML and update `parse_slide_urls` selectors/regexes to match the current markup.","Retry later — bot-protection or transient pages can also return HTML without slide URLs.","Inspect the fetched HTML manually to confirm which case applies before changing code."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match slides::download(&url, &dest, progress).await {\n    Ok(res) => use(res),\n    Err(e) if e.to_string().contains(\"nao encontrei slides\") => {\n        // check deck is public / retry later / update scraper\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Confirm the deck is public in an incognito browser first.","Don't rely on scraping heuristics — expect breakage after SlideShare redesigns.","Keep the scraper's parsing logic updated against current SlideShare HTML."],"tags":["scraping","html-parsing","slideshare","empty-result"],"backgroundTag":"empty-result-set","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}