tonhowtf/omniget · error
Pin not found
Error message
Pin not found
What it means
After fetching the pin HTML, the code checks check_pin_not_found(&html) and bails with 'Pin not found' if Pinterest's page indicates the pin does not exist (removed, private, or never existed). This is an explicit not-found signal from the scraped page content, not an HTTP 404.
Solutions
- Confirm the pin opens in a normal browser with the same URL; if it 404s there, the pin genuinely no longer exists.
- Distinguish bot-blocking from real not-found: refine check_pin_not_found to look at specific markers (e.g. 'Sorry! Something went wrong' vs real 404 text).
- Retry with different headers/proxy if a valid pin triggers false-positive not-found detection.
- Surface a clear user-facing message that the pin is unavailable or private.
Example fix
// before
if Self::check_pin_not_found(&html) {
return Err(anyhow!("Pin not found"));
}
// after
if Self::check_pin_not_found(&html) {
return Err(anyhow!("Pin {} not found (deleted, private, or blocked)", pin_id));
} Defensive patterns
Strategy: try-catch
Validate before calling
// Rust: no local pre-check possible (server-side pin state); guard after fetch
fn pin_unavailable(html: &str) -> bool {
html.contains("Sorry! Something went wrong") || html.contains("Pin not found")
} Try / catch
match get_media_info(pin_url).await {
Err(e) if e.to_string().contains("Pin not found") => {
eprintln!("This pin was deleted, is private, or is not available in your region");
}
other => other?,
} Prevention
- Check the pin in a browser before assuming an extractor bug
- Keep check_pin_not_found markers updated against Pinterest's real error pages
- Distinguish true 404 content from soft-block/limit pages to avoid false positives
- Cache known-dead pin IDs to skip repeated failed fetches
When it happens
Trigger: native_get_media_info -> fetch_pin_html succeeds (2xx), but the returned HTML contains Pinterest's not-found markers detected by check_pin_not_found — deleted pin, private/restricted pin, region-blocked pin, or a soft-404 page.
Common situations: User shares a link to a pin that was deleted; pin is on a private board; Pinterest serves a 200 'sorry/limit' page to bots that matches the not-found heuristics; region-locked content rendering an empty pin page.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Pin not found
- o Pinterest nao devolveu esse pin
- board nao encontrado
- perfil nao encontrado
- HTTP ao acessar pin
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/bb91e3cabf7b1672.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/platforms/pinterest/mod.rs:276
}
impl PinterestDownloader {
async fn fallback_ytdlp(&self, url: &str) -> anyhow::Result<MediaInfo> {
let ytdlp_path = crate::core::ytdlp::ensure_ytdlp().await?;
let json = crate::core::ytdlp::get_video_info(&ytdlp_path, url, &[]).await?;
crate::platforms::generic_ytdlp::GenericYtdlpDownloader::parse_video_info(&json)
}
async fn native_get_media_info(&self, url: &str) -> anyhow::Result<MediaInfo> {
let canonical = self.resolve_pin_url(url).await?;
let pin_id =
Self::extract_pin_id(&canonical).ok_or_else(|| anyhow!("Could not extract pin ID"))?;
let html = self.fetch_pin_html(&pin_id).await?;
if Self::check_pin_not_found(&html) {
return Err(anyhow!("Pin not found"));
}
if let Some(video_url) = Self::extract_video_url(&html) {
return Ok(MediaInfo {
title: format!("pinterest_{}", pin_id),
author: String::new(),
platform: "pinterest".to_string(),
duration_seconds: None,
thumbnail_url: None,
available_qualities: vec![VideoQuality {
label: "original".to_string(),
width: 0,
height: 0,
url: video_url,
format: "mp4".to_string(),
}],
media_type: MediaType::Video,
file_size_bytes: None,View on GitHub (pinned to 8600b91f42)