DIYgod/RSSHub · error · Error

Tieba API error: ${data.error_msg || data.error_code}

Error message

Tieba API error: ${data.error_msg || data.error_code}

What it means

The Tieba forum route inspects the API response for a non-zero error_code and throws an Error containing error_msg (or error_code as fallback). This surfaces upstream Baidu errors (rate limiting, invalid signature, bad parameters, anti-spam) rather than silently rendering an empty feed.

Source

Thrown at lib/routes/baidu/tieba/forum.tsx:58

            text += item.text;
        } else if (Number(item.type) === 3) {
            const src = item.origin_src || item.original_src || item.big_cdn_src || item.cdn_src || item.src;
            if (src) {
                images.push(src);
            }
        }
    }
    return { text, images };
}

async function handler(ctx) {
    const { kw, cid = '0', sortBy = 'created' } = ctx.req.param();
    const isGood = ctx.req.path.includes('good');

    const data = await getTiebaForumData({ kw, cid, isGood, sortBy });

    if (data?.error_code && data.error_code !== '0' && data.error_code !== 0) {
        throw new Error(`Tieba API error: ${data.error_msg || data.error_code}`);
    }

    const threadList = data?.thread_list || [];

    if (threadList.length === 0) {
        throw new Error('No threads found. The cookie may be expired or invalid. Please check your BAIDU_COOKIE.');
    }

    // Build author map from user_list
    const userList: any[] = data?.user_list || [];
    const authorMap = new Map<number, string>();
    for (const user of userList) {
        if (user.id) {
            authorMap.set(Number(user.id), user.name_show || user.name || '');
        }
    }

    const list = threadList.map((thread) => {

View on GitHub (pinned to bed535e087)

Solutions

  1. Refresh BAIDU_COOKIE by re-logging in to tieba.baidu.com and copying fresh cookies.
  2. Verify the forum keyword (kw) exists and is not blocked.
  3. Slow down requests if the error code indicates rate limiting; retry after a backoff.
  4. Check the error_msg text in the thrown message - it usually names the specific failure.

Example fix

// before
BAIDU_COOKIE=expired_value
// after
BAIDU_COOKIE=freshly_copied_cookie_string
Defensive patterns

Strategy: try-catch

Validate before calling

function isTiebaApiOk(data: any): boolean {
  return !data || data.error_code === 0 || data.error_code === '0';
}
if (!isTiebaApiOk(data)) throw new Error(`Tieba API error: ${data.error_msg || data.error_code}`);

Type guard

const isTiebaApiSuccess = (d: any): boolean =>
  d == null || d.error_code === 0 || d.error_code === '0' || d.error_code === undefined;

Try / catch

try {
  return await handler(ctx);
} catch (e) {
  if (e instanceof Error && /Tieba API error/.test(e.message)) {
    // refresh cookie and retry once
    return await handler(ctx);
  }
  throw e;
}

Prevention

When it happens

Trigger: getTiebaForumData returns a payload with error_code that is neither '0' nor 0 - e.g. expired/invalid cookie signature, blocked keyword (kw), missing cid, or Baidu's anti-crawler returning an error_code.

Common situations: BAIDU_COOKIE expired or revoked; the queried forum name (kw) is banned/renamed; running from an IP that Baidu has throttled; sending requests without the headers/signature the API now expects.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/59ad8d3b71dc0b15. Report an issue: GitHub.