{"record":{"id":"e41839d6325e4a57","repo":"tonhowtf/omniget","slug":"nenhum-favorito-foi-lido-esses-perfis-costumam-exigir-a-sess","errorCode":null,"errorMessage":"nenhum favorito foi lido: esses perfis costumam exigir a sessão do site","messagePattern":"nenhum favorito foi lido: esses perfis costumam exigir a sessão do site","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/tumblr/art.rs","lineNumber":421,"sourceCode":"    let mut rows: Vec<FavRow> = Vec::new();\n    let mut by_platform: Vec<(String, u64)> = Vec::new();\n    for (platform, url) in &sources {\n        super::super::report(progress, TOOL_ID, \"started\", 0, None, Some(url.clone()));\n        let entries = gdl::dump(\n            url,\n            cookie_path.as_deref(),\n            opts.limit,\n            &[],\n            progress,\n            TOOL_ID,\n        )\n        .await?;\n        let found = rows_from_dump(platform, &entries);\n        by_platform.push((platform.to_string(), found.len() as u64));\n        rows.extend(found);\n    }\n    if rows.is_empty() {\n        anyhow::bail!(\"nenhum favorito foi lido: esses perfis costumam exigir a sessão do site\");\n    }\n\n    let mut dupes = 0u64;\n    let mut checked = 0u64;\n    if let Some(dir) = opts.local_dir.as_deref().filter(|d| !d.trim().is_empty()) {\n        let want_hash = opts.check_dupes;\n        let path = PathBuf::from(dir);\n        let p2 = progress.clone();\n        let local = tokio::task::spawn_blocking(move || scan_local(&path, want_hash, &p2)).await?;\n        if !local.is_empty() {\n            dupes = match_by_name(&mut rows, &local);\n            if want_hash && !local.hashes.is_empty() {\n                let client = super::super::client()?;\n                let total = rows.len().min(opts.max_check as usize) as u64;\n                for (i, row) in rows.iter_mut().enumerate() {\n                    if i as u64 >= opts.max_check {\n                        break;\n                    }","sourceCodeStart":403,"sourceCodeEnd":439,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/tumblr/art.rs#L403-L439","documentation":"After fetching the likes dumps for each platform, the favorites tool converts them into rows. If zero rows were read from any platform, it concludes the profiles likely require an authenticated session and aborts with this explanatory message.","triggerScenarios":"Calling favorites `run` without a Netscape session cookie file (session_netscape) while the target Tumblr profiles keep their likes private, or the session is expired/invalid so the dump contains no liked posts.","commonSituations":"Anonymous scraping of private likes; expired Tumblr session cookies; cookies exported from a different account; the profile has the public likes list disabled.","solutions":["Provide a fresh session_netscape cookie file exported from a logged-in Tumblr browser session","Re-export cookies if the session expired","Verify the target profile allows its likes to be seen (public likes list enabled)","Log the raw dump per platform to confirm the fetch succeeded but contained no likes"],"exampleFix":"// before\nlet opts = Options { session_netscape: None, .. }; // anonymous, likes hidden\n// after\nlet opts = Options { session_netscape: Some(\"cookies.txt\".into()), .. }; // logged-in session","handlingStrategy":"try-catch","validationCode":"// require a session cookie file for private likes\nif opts.session_netscape.is_none() {\n    return Err(anyhow!(\"likes privados exigem session_netscape\"));\n}","typeGuard":null,"tryCatchPattern":"match art::run(opts).await {\n    Err(e) if e.to_string().contains(\"nenhum favorito foi lido\") => {\n        eprintln!(\"exporte cookies de sessão do Tumblr e verifique se os likes são públicos\");\n    }\n    Err(e) => return Err(e),\n    Ok(r) => use(r),\n}","preventionTips":["Always run with fresh logged-in session cookies for likes scraping","Re-export cookies regularly before they expire","Confirm target profiles have public likes enabled"],"tags":["tumblr","authentication","scraping","empty-result"],"backgroundTag":"authentication-required","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"}