tonhowtf/omniget · error

nenhum favorito foi lido: esses perfis costumam exigir a…

Error message

nenhum favorito foi lido: esses perfis costumam exigir a sessão do site

What it means

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.

Solutions

  1. Provide a fresh session_netscape cookie file exported from a logged-in Tumblr browser session
  2. Re-export cookies if the session expired
  3. Verify the target profile allows its likes to be seen (public likes list enabled)
  4. Log the raw dump per platform to confirm the fetch succeeded but contained no likes

Example fix

// before
let opts = Options { session_netscape: None, .. }; // anonymous, likes hidden
// after
let opts = Options { session_netscape: Some("cookies.txt".into()), .. }; // logged-in session
Defensive patterns

Strategy: try-catch

Validate before calling

// require a session cookie file for private likes
if opts.session_netscape.is_none() {
    return Err(anyhow!("likes privados exigem session_netscape"));
}

Try / catch

match art::run(opts).await {
    Err(e) if e.to_string().contains("nenhum favorito foi lido") => {
        eprintln!("exporte cookies de sessão do Tumblr e verifique se os likes são públicos");
    }
    Err(e) => return Err(e),
    Ok(r) => use(r),
}

Prevention

When it happens

Trigger: 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.

Common situations: Anonymous scraping of private likes; expired Tumblr session cookies; cookies exported from a different account; the profile has the public likes list disabled.

Related errors


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/e41839d6325e4a57. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/tumblr/art.rs:421

    let mut rows: Vec<FavRow> = Vec::new();
    let mut by_platform: Vec<(String, u64)> = Vec::new();
    for (platform, url) in &sources {
        super::super::report(progress, TOOL_ID, "started", 0, None, Some(url.clone()));
        let entries = gdl::dump(
            url,
            cookie_path.as_deref(),
            opts.limit,
            &[],
            progress,
            TOOL_ID,
        )
        .await?;
        let found = rows_from_dump(platform, &entries);
        by_platform.push((platform.to_string(), found.len() as u64));
        rows.extend(found);
    }
    if rows.is_empty() {
        anyhow::bail!("nenhum favorito foi lido: esses perfis costumam exigir a sessão do site");
    }

    let mut dupes = 0u64;
    let mut checked = 0u64;
    if let Some(dir) = opts.local_dir.as_deref().filter(|d| !d.trim().is_empty()) {
        let want_hash = opts.check_dupes;
        let path = PathBuf::from(dir);
        let p2 = progress.clone();
        let local = tokio::task::spawn_blocking(move || scan_local(&path, want_hash, &p2)).await?;
        if !local.is_empty() {
            dupes = match_by_name(&mut rows, &local);
            if want_hash && !local.hashes.is_empty() {
                let client = super::super::client()?;
                let total = rows.len().min(opts.max_check as usize) as u64;
                for (i, row) in rows.iter_mut().enumerate() {
                    if i as u64 >= opts.max_check {
                        break;
                    }

View on GitHub (pinned to 8600b91f42)