tonhowtf/omniget · error · anyhow::Error

Post not available; graphql=

Error message

Post not available; graphql='{}'; syndication='{}'; html='{}'

What it means

This is the terminal aggregate error of TwitterDownloader::native_get_media_info. After all three fetch strategies fail (the GraphQL API, the syndication endpoint, and the HTML fallback), the error bundles all three failure messages into one anyhow! error. It means the tweet's media could not be retrieved through any available channel.

Solutions

  1. Check the three embedded sub-errors (graphql=..., syndication=..., html=...) to identify the root cause — usually all three fail for the same reason.
  2. Ensure a valid auth cookie is available: auth_cookie_string() returned None or an expired cookie, so re-authenticate or refresh cookies.txt.
  3. Verify the tweet URL is a valid, public, non-deleted tweet that actually contains media.
  4. Update the app/extraction logic if X changed its HTML or GraphQL responses.
  5. Retry later on transient network failures, or use a fallback extractor such as yt-dlp.

Example fix

// before: letting all three fail silently into one error
return Err(anyhow!("Post not available; graphql='{}'; syndication='{}'; html='{}'", graphql_err, syndication_err, html_err));
// after: fail fast with a clearer cause when auth is missing
if Self::auth_cookie_string().is_none() {
    return Err(anyhow!("Post not available: no auth cookie configured; graphql='{}'; syndication='{}'; html='{}'", graphql_err, syndication_err, html_err));
}
Defensive patterns

Strategy: try-catch

Validate before calling

if !url.contains("x.com/") && !url.contains("twitter.com/") { return Err(anyhow!("not a tweet URL")); }
if Self::auth_cookie_string().is_none() { println!("warning: no auth cookie — twitter extraction may fail"); }

Type guard

fn is_tweet_url(url: &str) -> bool {
    url.contains("x.com/") || url.contains("twitter.com/")
}

Try / catch

match downloader.get_media_info(&tweet_url).await {
    Ok(info) => use(info),
    Err(e) if e.to_string().contains("Post not available") => {
        // read the graphql=/syndication=/html= segments for root cause;
        // prompt user for auth cookie or fall back to yt-dlp
    }
    Err(e) => report(e),
}

Prevention

When it happens

Trigger: Calling native_get_media_info (via get_media_info) on a tweet URL when: (1) the GraphQL API rejects or errors (auth tokens invalid, API changes), (2) the syndication endpoint errors or returns no media, and (3) request_html_media also fails (non-2xx HTTP, no photo URLs in HTML, or network error).

Common situations: Deleted or protected tweets; tweets whose media is age-restricted or requires login (the auth cookie is absent or expired); X/Twitter API or HTML markup changes breaking the extraction regexes; network/firewall blocking pbs.twimg.com or x.com.

Related errors


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

Appendix: source

Thrown at src-tauri/src/platforms/twitter/mod.rs:1015

                                        "Post not available; graphql='{}'; syndication_extract='{}'; html='{}'",
                                        graphql_err,
                                        syndication_extract_err,
                                        html_err
                                    ));
                                }
                            }
                        }
                    },
                    Err(syndication_err) => {
                        tracing::warn!(
                            "[twitter] syndication lookup failed for tweet_id={}: {}",
                            tweet_id,
                            syndication_err
                        );
                        match self.request_html_media(url).await {
                            Ok(items) => items,
                            Err(html_err) => {
                                return Err(anyhow!(
                                    "Post not available; graphql='{}'; syndication='{}'; html='{}'",
                                    graphql_err,
                                    syndication_err,
                                    html_err
                                ));
                            }
                        }
                    }
                }
            }
        };

        let twitter_media = Self::parse_media_items(&media_items)?;

        Ok(Self::media_info_from_twitter_media(
            filename_base,
            twitter_media,
        ))

View on GitHub (pinned to 8600b91f42)