Skip to content

下载媒体 ​

URL 有效期 ​

微博媒体 URL 是短期签名地址,通常约一小时后失效。归档时及时下载,或者只保存 URL 与元数据。

下载器使用独立的 CDN 客户端,请求只带微博 Referer,并限制允许的主机后缀。

下载单条微博的媒体 ​

ts
const result = await sdk.media.downloadByMblogId('QqsYymYOS', {
  dir: './media',
  include: [MediaType.PIC, MediaType.VIDEO],
  concurrency: 3,
  dryRun: false,
})

console.log(result.totals)
// { total, downloaded, skipped, failed, planned, bytes }

也可以传入已归一化的微博,省去一次详情请求:

ts
const tweet = await sdk.tweets.getByMblogId('QqsYymYOS')
const result = await sdk.media.downloadTweetMedia(tweet, { dir: './media' })

选项 ​

选项默认说明
dir必填输出目录,SDK 内解析为绝对路径
include全部参与的媒体类型(MediaType)
concurrency3媒体并发,范围 1–8
retries2单媒体最大重试次数,范围 0–10
timeoutMs30000连接 / 首字节超时
idleTimeoutMs20000流式读取空闲超时
maxBytes512 MiB单文件字节上限
overwritefalse覆盖已存在的非空文件;默认跳过
refererhttps://weibo.com/CDN Referer
allowedHostsDEFAULT_MEDIA_ALLOWED_HOSTS允许的媒体主机后缀
refreshExpiredtrue403 / 404 / 410 时重新拉微博换新 URL(每条最多 1 次)
dryRunfalse只规划,不联网、不落盘
signal—取消信号
failFastfalse首个失败即中止,含取消在途下载
onProgress—每完成一项回调;抛错不影响流程
onItemError—单项失败回调;抛错不掩盖原始错误

结果 ​

ts
interface TweetMediaDownloadResult {
  mblogId: string
  dir: string
  dryRun: boolean
  items: MediaDownloadItem[]        // 顺序与原始 media 一致
  failures: FailedItem[]
  totals: MediaDownloadTotals       // downloaded + skipped + failed + planned === total
  errorsFile?: string               // 有失败且非 dryRun 时的失败清单路径
  durationMs: number
}

items 的状态:

  • downloaded:成功,带 bytes / contentType / refreshed
  • skipped:exists / filtered-out / no-url / duplicate-id / duplicate-url / aborted
  • planned:dry-run 或 failFast 中止
  • failed:带 code / message / retryable / httpStatus

CLI ​

bash
weibo-cli media download QqsYymYOS --out ./media
weibo-cli media download QqsYymYOS --out ./media --dry-run
weibo-cli media download QqsYymYOS --out ./media --include pic,video

media download 输出 NDJSON,每行一个事件;stdout 可以直接接 jq。

只读公开数据;请遵守微博服务条款与隐私边界。