Skip to content

分页与流式读取 ​

两种方法形态 ​

前缀行为返回
list* / get*请求一页或一个实体单页结果,含下一页游标
stream*自动翻页,逐条产出AsyncIterableIterator<T>
ts
const page = await sdk.tweets.listByUserId('1111681197', { page: 1 })
console.log(page.tweets, page.page, page.hasMore)

for await (const tweet of sdk.tweets.streamByUserId('1111681197')) {
  console.log(tweet.mblogId)
}

游标类型 ​

游标端点
page用户时间线(mymblog)、点赞、收藏、关注 / 粉丝、转发、点赞者、超话
maxId(上游 max_id)评论、二级评论、历史评论、@ 我、通知、首页 Feed
sinceId(上游 since_id)图片墙 / 相册;首页 Feed 用于增量过滤
cursor视频瀑布

listFriendTimeline 用 maxId 翻旧页;sinceId 返回比该微博更新的条目,只取一页。

流式通用选项 ​

所有 stream* 支持:

选项说明
maxItems最多产出条数,按跨页去重后的结果计数;达到后停止请求下一页
maxPages最多翻页数;缺省不限
onProgress每页回调;回调抛错时流继续

时间倒序的流(用户时间线、首页 Feed、转发、@ 我、历史评论、评论 / 点赞通知)支持:

选项说明
since时间下界(YYYY-MM-DD 或 unix 秒);遇到更早的条目停止翻页
until时间上界;更晚的条目跳过

评论热度序、点赞、收藏的条目顺序与操作时间不一致,因此没有日期边界。

停止条件 ​

流在任一条件命中时停止:

  • 空页;
  • 整页重复(上游忽略游标时);
  • 游标缺失、为 0 或不前进;
  • 达到 total_number(该端点提供且语义可靠时);
  • 达到 maxItems / maxPages;
  • 命中 since / until 边界。

顶层评论的 total_number 包含楼中楼和不可见评论;首页 Feed 的 total_number 是约 2000 的上限值。这两种情况都按游标判断结束。

访客身份下,用户时间线 / 点赞 / 关注 / 粉丝只有第一页,结果带 partial: true。

进度回调 ​

ts
for await (const liker of sdk.tweets.streamLikers('5355873276528697', {
  maxPages: 2,
  onProgress: (progress) => {
    console.log(progress.page, progress.processed, progress.pageSize, progress.total)
  },
})) {
  console.log(liker.id, liker.name)
}

各流的进度字段见对应服务页面(*StreamProgress)。

去重 ​

流式方法跨页按固定 id 去重:

  • 微博:mblogId
  • 评论:id
  • 点赞者 / 用户:用户 id
  • 媒体:asset.id

持久化时按同一 id 做幂等写入。

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