jackwener/OpenCLI · error · ArgumentError
weibo delete: URL must be a weibo.com or weibo.cn post URL
Error message
weibo delete: URL must be a weibo.com or weibo.cn post URL
What it means
When the id argument looks like a URL, its hostname must match WEIBO_HOST_RE, i.e. end with weibo.com or weibo.cn. URLs from other domains are rejected with ArgumentError so the command never deletes based on ids scraped from unrelated sites.
Source
Thrown at clis/weibo/delete.js:24
import { requireObjectEvaluateResult, unwrapEvaluateResult } from './utils.js';
const WEIBO_HOST_RE = /(^|\.)weibo\.(com|cn)$/i;
const POST_ID_RE = /^[A-Za-z0-9]{4,32}$/;
function normalizePostId(raw) {
const input = String(raw ?? '').trim();
if (!input) {
throw new ArgumentError('weibo delete: id cannot be empty');
}
let candidate = input;
try {
const url = new URL(input);
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
throw new ArgumentError('weibo delete: URL must use http or https');
}
if (!WEIBO_HOST_RE.test(url.hostname)) {
throw new ArgumentError('weibo delete: URL must be a weibo.com or weibo.cn post URL');
}
const parts = url.pathname.split('/').filter(Boolean);
if (url.hostname.toLowerCase().endsWith('weibo.cn') && parts[0] === 'status') {
candidate = parts[1] ?? '';
} else {
candidate = parts.at(-1) ?? '';
}
} catch (error) {
if (error instanceof ArgumentError) throw error;
}
candidate = String(candidate ?? '').trim();
if (!POST_ID_RE.test(candidate)) {
throw new ArgumentError('weibo delete: id must be a numeric idstr, mblogid, or Weibo post URL');
}
return candidate;
}
View on GitHub (pinned to 49907e53dc)
Solutions
- Open the short link in a browser and copy the final weibo.com/weibo.cn URL it redirects to
- Use the id directly from `weibo me`/`weibo post` output instead of a URL
- Ensure the domain is exactly weibo.com or weibo.cn (subdomains like www are fine; other brands are not)
Example fix
// before weibo delete --id 'https://t.cn/A6bCdEf' // after weibo delete --id 'https://weibo.com/1234567890/AbCdEfGhI'
Defensive patterns
Strategy: validation
Validate before calling
function isWeiboPostUrl(u) {
try { const url = new URL(u); return /(^|\.)weibo\.(com|cn)$/i.test(url.hostname); }
catch { return false; }
} Type guard
function isWeiboHost(hostname) {
return /(^|\.)weibo\.(com|cn)$/i.test(hostname);
} Try / catch
try {
await cliDelete({ id: input });
} catch (err) {
if (err instanceof ArgumentError && /weibo\.com or weibo\.cn post URL/.test(err.message)) {
throw new Error('Resolve short links (t.cn) to the final weibo.com URL first');
} else throw err;
} Prevention
- Resolve t.cn and other shorteners in a browser before passing the final URL
- Use the id from `weibo me`/`weibo post` output to sidestep URL handling entirely
- Double-check you copied a weibo.com/weibo.cn link, not another site's
- Validate hostnames in scripts before invoking the CLI
When it happens
Trigger: Passing a shortener link (t.cn, bit.ly), a mirror/aggregator URL, or a m.weibo.cn-adjacent domain not covered by the regex, or pasting the wrong link entirely (e.g. a Twitter/X URL).
Common situations: Users copying share links from third-party Weibo clients or shorteners, or confusing the post's t.cn short link (used in tweets) with the canonical weibo.com URL.
Related errors
- ${label} must point to linkedin.com
- ${label} must be an exact https://www.linkedin.com/messaging
- weibo delete: id cannot be empty
- weibo delete: URL must use http or https
- weibo delete: id must be a numeric idstr, mblogid, or Weibo
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/1ec295375b9be66c.
Report an issue: GitHub.