给 AI

问答

微博的 uid、mid 和 bid 分别是什么?

简短回答

uid 是账号的数字 ID,mid 是单条微博的数字 ID(现在是 16 位),bid 是同一个 mid 的 base62 写法,也就是 weibo.com/<uid>/<bid> 链接里那 9 位短码。okdata 的微博搜索把 mid 放在 id 里、把 bid 放在 url 里返回,每页 $0.002;微博账号信息接口要传数字 uid,每次 $0.002。

微博常见的标识有三个,其中两个其实是同一个数字换了身衣服。uid 指账号,mid 指一条微博,bid 是这条微博的 mid 用 base62 编码后的样子,就是你在微博地址里看到的那段:weibo.com/6082913457/Qkz3PvVLT 里,前面是作者的 uid,后面是 bid。

三个放在一起看

uid mid bid
指什么 账号 一条微博 一条微博
格式 数字,一般 10 位 数字,现在的微博是 16 位 9 个字符,取自 0-9、a-z、A-Z
例子 6082913457 5249013377610245 Qkz3PvVLT
在哪见到 weibo.com/u/<uid>、各处的作者信息 网页版和 App 的 JSON(mid、idstr) 微博链接(网页 JSON 里叫 mblogid)

叫法并不统一。微博网页版和 App 的 JSON 里,mid 是数字字符串,短码叫 mblogid;而官方开放平台的文档里,id 是数字,“MID”反倒指 base62 那种写法:statuses/querymid 把数字 ID 换成 8Ras3qlz 这样的码,statuses/queryid 再换回来。哪个工具让你填“mid”,先确认它要的是纯数字还是字母数字混合。

mid 怎么换成 bid

把数字 mid 从右往左每 7 位切一段。每段用字母表 0-9a-zA-Z 写成 62 进制,除了最左边那段,其余都左补 0 到 4 位。最后拼起来。

以 5249013377610245 为例:切成 52、4901337、7610245 三段;换成 62 进制分别是 Q、kz3P、vVLT;拼起来就是 Qkz3PvVLT。反过来时,把 bid 从右往左每 4 位切一段,逐段解码,再左补 0 到 7 位。我们拿 6 条真实微博核对过,它们的数字 mid 和链接短码出自同一次返回,6 条全部对得上。

okdata 收什么、返回什么

接口 传什么 返回什么 费用
微博搜索 query id 是 mid,url 是 weibo.com/uid/bid,author.id 是 uid 每页 $0.002
微博账号信息 id 传数字 uid 账号资料,id 即 uid $0.002

账号设置了个性域名时,author.username 里是这个域名,也就是 weibo.com/somebrand 这种链接里 weibo.com/ 后面那段。账号信息接口不认个性域名,要传数字的 author.id。

示例

import os, requests

ALPHA = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

def mid_to_bid(mid: str) -> str:
    parts, end = [], len(mid)
    while end > 0:
        start = max(0, end - 7)
        n, code = int(mid[start:end]), ""
        while n:
            n, r = divmod(n, 62)
            code = ALPHA[r] + code
        parts.insert(0, code.rjust(4, "0") if start else code or "0")
        end = start
    return "".join(parts)

assert mid_to_bid("5249013377610245") == "Qkz3PvVLT"

body = requests.get("https://api.okdata.online/v1/weibo/posts/search", timeout=60,
    headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
    params={"query": "新品发布", "fields": "id,url,author.id,author.username"}).json()
for p in body["data"]["items"]:
    print(p["author"]["id"], p["id"], mid_to_bid(p["id"]), p["url"])

限制

  • mid 和 uid 都按字符串存。16 位的 mid 超过了 Excel 保留的 15 位有效数字,JavaScript 里也别拿它做运算。
  • 接口目录里没有按 ID 取单条微博的接口。mid 或 bid 能告诉你是哪一条,但在这里要通过搜索才能拿到微博内容。
  • 改昵称不会改 uid,所以账号要按 uid 来区分,不要按昵称或个性域名。

知道 uid 想查粉丝数等资料,见知道微博 UID,怎么拿到粉丝数和账号资料。

资料来源

  1. 微博开放平台:statuses/querymid(数字 ID 转 base62 的 MID)open.weibo.com · 读取于
  2. 微博开放平台:statuses/queryid(base62 的 MID 转数字 ID)open.weibo.com · 读取于
  3. 微博开放平台:users/showopen.weibo.com · 读取于

这个问题出现过的地方(读取于 2026-11-12)

更新于

接上一次,以后直接问 AI。

新 key 自带 $0.10 试用额度。贴一句话,就能接进你的智能体。

免费开始
一句话接进你的 AI

把这句话发给你的智能体

读一下 https://okdata.online/zh/agents.md,帮我把 okdata 配好;我的 key 在环境变量 OKDATA_API_KEY 里。

Claude Code、Cursor、Codex 等能打开网址的智能体,读完会自己配好。

MCP 地址https://api.okdata.online/mcp