{"record":{"id":"c0b6a5b2fcb64412","repo":"tonhowtf/omniget","slug":"board-nao-encontrado","errorCode":null,"errorMessage":"board nao encontrado","messagePattern":"board nao encontrado","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/pinterest/api.rs","lineNumber":956,"sourceCode":"            .resource(\n                \"Pin\",\n                json!({ \"id\": id, \"field_set_key\": \"detailed\" }),\n                &format!(\"/pin/{}/\", id),\n            )\n            .await?;\n        parse_pin(&data).ok_or_else(|| anyhow!(\"o Pinterest nao devolveu esse pin\"))\n    }\n\n    pub async fn board(&self, user: &str, slug: &str) -> anyhow::Result<Board> {\n        let src = format!(\"/{}/{}/\", user, slug);\n        let (data, _) = self\n            .resource(\n                \"Board\",\n                json!({ \"username\": user, \"slug\": slug, \"field_set_key\": \"detailed\" }),\n                &src,\n            )\n            .await?;\n        parse_board(&data).ok_or_else(|| anyhow!(\"board nao encontrado\"))\n    }\n\n    pub async fn board_sections(&self, board_id: &str) -> anyhow::Result<Vec<Section>> {\n        let mut out = Vec::new();\n        let mut bookmark: Option<String> = None;\n        loop {\n            let mut opts = json!({ \"board_id\": board_id, \"page_size\": 100 });\n            if let Some(b) = &bookmark {\n                opts[\"bookmarks\"] = json!([b]);\n            }\n            let (data, next) = self.resource(\"BoardSections\", opts, \"/\").await?;\n            for v in data.as_array().cloned().unwrap_or_default() {\n                if let Some(id) = s(&v[\"id\"]) {\n                    out.push(Section {\n                        id,\n                        slug: s(&v[\"slug\"]).unwrap_or_default(),\n                        title: s(&v[\"title\"]).unwrap_or_default(),\n                        pin_count: n(&v[\"pin_count\"]),","sourceCodeStart":938,"sourceCodeEnd":974,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/pinterest/api.rs#L938-L974","documentation":"api.rs board() requests a Board via Pinterest's BoardResource with field_set_key \"detailed\" and parses it. If `parse_board(&data)` yields None — no board payload in the response — the library raises \"board nao encontrado\". This means Pinterest did not return a parseable board for the given username/slug pair.","triggerScenarios":"Calling PinterestApi::board(user, slug) with a nonexistent board, a renamed slug, a secret board, or when Pinterest returns an anti-bot/login page so the JSON has no board object.","commonSituations":"Bookmarked board URLs whose slug changed after the owner renamed the board; typos in username/slug; scraping secret boards without the owner's session cookies.","solutions":["Check the board URL /user/slug/ resolves in a browser (slugs change on rename, e.g. -2 suffixes).","Supply the owner's session cookies if the board is secret.","Re-derive the slug from the user's board list via user_boards() instead of hardcoding it.","Catch and treat as not-found, listing available boards for the user."],"exampleFix":"// before\nlet board = api.board(user, slug).await?;\n// after\nlet board = api.board(user, slug).await\n    .map_err(|_| MyError::BoardNotFound(format!(\"{}/{}\", user, slug)))?;","handlingStrategy":"try-catch","validationCode":"// Board slugs are lowercase-hyphenated; verify shape before calling\nfn is_valid_slug(slug: &str) -> bool { !slug.is_empty() && slug.chars().all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '-') }","typeGuard":"fn board_resolved(b: &Option<Board>) -> bool { b.as_ref().map(|x| !x.id.is_empty()).unwrap_or(false) }","tryCatchPattern":"match api.board(user, slug).await {\n    Ok(b) => process(b),\n    Err(e) if e.to_string().contains(\"board nao encontrado\") => list_boards(user).await?,\n    Err(e) => return Err(e),\n}","preventionTips":["Resolve slugs dynamically via user_boards() instead of hardcoding","Remember slugs change when owners rename boards","Check the board URL in a browser when debugging","Use the owner's cookies for secret boards"],"tags":["pinterest","not-found","scraping","board"],"backgroundTag":"resource-not-found","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"}