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

  1. Confirm the pin opens in a normal browser with the same URL; if it 404s there, the pin genuinely no longer exists.
  2. 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).
  3. Retry with different headers/proxy if a valid pin triggers false-positive not-found detection.
  4. 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

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


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)