tonhowtf/omniget · error

Post not available

Error message

Post not available: {}

What it means

TikTok's video-detail payload contains a non-empty statusMsg string; fetch_detail forwards it to the caller wrapped in this error. It is TikTok's own explanation of why the post content is unavailable.

Solutions

  1. Read TikTok's statusMsg in the error text to determine the exact cause
  2. Inform the user the post itself is unavailable (not a library bug)
  3. Skip/mark the post and continue batch processing
  4. Retest later for temporary messages like 'currently unavailable'
Defensive patterns

Strategy: try-catch

Try / catch

match get_media_info(url).await {
    Err(e) if e.to_string().starts_with("Post not available:") => {
        mark_unavailable(url, e.to_string())
    }
    other => other,
}

Prevention

When it happens

Trigger: The video-detail JSON parses successfully but statusMsg is set (e.g. 'Video currently unavailable', 'Content removed', region or account restrictions).

Common situations: Deleted or private videos, content removed for ToS violations, region-locked posts, or account suspended/deleted.

Related errors


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

Appendix: source

Thrown at src-tauri/src/platforms/tiktok/mod.rs:183

            .split("<script id=\"__UNIVERSAL_DATA_FOR_REHYDRATION__\" type=\"application/json\">")
            .nth(1)
            .and_then(|s| s.split("</script>").next())
            .ok_or_else(|| anyhow!("TikTok is blocking requests. Try again in a few minutes."))?;

        let data: serde_json::Value = serde_json::from_str(json_str)
            .map_err(|_| anyhow!("Erro ao processar resposta do TikTok"))?;

        let video_detail = data
            .get("__DEFAULT_SCOPE__")
            .and_then(|s| s.get("webapp.video-detail"))
            .ok_or_else(|| anyhow!("Video data not found in TikTok response"))?;

        if let Some(status_msg) = video_detail
            .get("statusMsg")
            .and_then(|v| v.as_str())
            .filter(|s| !s.is_empty())
        {
            return Err(anyhow!("Post not available: {}", status_msg));
        }

        if let Some(status_code) = video_detail.get("statusCode").and_then(|v| v.as_u64()) {
            if status_code != 0 {
                return Err(anyhow!("Post not available (status {})", status_code));
            }
        }

        let detail = video_detail
            .pointer("/itemInfo/itemStruct")
            .ok_or_else(|| anyhow!("Video data not found in TikTok response"))?
            .clone();

        if detail
            .get("isContentClassified")
            .and_then(|v| v.as_bool())
            .unwrap_or(false)
        {

View on GitHub (pinned to 8600b91f42)