{"record":{"id":"759c591f091d9bba","repo":"tonhowtf/omniget","slug":"o-bilibili-est-limitando-as-requisi-es-espere-um-pouco-e","errorCode":null,"errorMessage":"o Bilibili está limitando as requisições; espere um pouco e repita","messagePattern":"o Bilibili está limitando as requisições; espere um pouco e repita","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/src/platforms/bilibili/danmaku/export.rs","lineNumber":221,"sourceCode":"\n/// Erro de API virando frase. Tudo que depende de sessão degrada com o mesmo\n/// recado — é o caso do conteúdo pago (`cheese`) e do bangumi regional.\nfn friendly(e: BilibiliError, with_account: bool) -> anyhow::Error {\n    match e {\n        BilibiliError::NotLoggedIn | BilibiliError::CookieMissing => anyhow!(\n            \"esse conteúdo pede a sessão do Bilibili — entre na conta pelo gerenciador de cookies e tente de novo\"\n        ),\n        BilibiliError::PremiumRequired if with_account => anyhow!(\n            \"a conta conectada não tem acesso a esse conteúdo pago\"\n        ),\n        BilibiliError::PremiumRequired => anyhow!(\n            \"conteúdo pago: conecte uma conta do Bilibili que já tenha a compra\"\n        ),\n        BilibiliError::GeoBlocked => {\n            anyhow!(\"o Bilibili bloqueia esse conteúdo na sua região; tente com proxy\")\n        }\n        BilibiliError::RateLimited => {\n            anyhow!(\"o Bilibili está limitando as requisições; espere um pouco e repita\")\n        }\n        BilibiliError::ContentUnavailable => {\n            anyhow!(\"não achei comentários nessa parte — ela pode ter sido removida\")\n        }\n        other => anyhow!(\"{}\", other.i18n_key()),\n    }\n}\n\nfn collect_parts(parsed: &parser::ParsedContent) -> Vec<DanmakuPart> {\n    let mut out = Vec::new();\n    for (i, item) in parsed.items.iter().enumerate() {\n        let cid = match item.cid {\n            Some(c) if c > 0 => c,\n            _ => continue,\n        };\n        let page = item.page.unwrap_or((i + 1) as u32);\n        let title = if item.title.trim().is_empty() {\n            format!(\"P{}\", page)","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/src/platforms/bilibili/danmaku/export.rs#L203-L239","documentation":"friendly() maps the Bilibili rate-limit error to this message: the API throttled the danmaku request (HTTP 412/429-style risk control) because too many requests came in a short window. The content is fine; waiting and retrying normally succeeds.","triggerScenarios":"Thrown at src-tauri/src/platforms/bilibili/danmaku/export.rs:221 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Wait a few minutes before exporting again","Avoid launching several exports/requests for the same video in parallel","If it persists, the IP may be temporarily flagged — pause Bilibili usage for a while"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}