对微博数据有了解的人都知道,一条微博内容对应有唯一的微博 url,同时对微博官方来说,又会生成一个 mid,mid 就是一条微博的唯一标识【就像 uid 是微博用户的唯一标识一样】,也类似于人的身份证号。其实,微博 url 里面有一串看起来无意义的字符【称之为 id,由字母、数字组成,6-9 个字符长度,当然以后也可能会变长】,可以和 mid 互相转换,本文就根据理论以及 Python 版本的实现,讲解微博 id 与 mid 的互相转换过程。
数据示例
下面列举一些微博内容的示例:
1、通过 id、uid 构造的 url,打开微博内容,示例:https://weibo.com/3086148515/I1IGF4Ud1 ,其中,3086148515 是 uid,I1IGF4Ud1 是 id。

这种格式的 url 可以在网页端通过点击微博的发表时间获取,如下图。

2、通过 id、mid 构造的 murl 打开微博内容,示例:https://m.weibo.cn/status/I1IGF4Ud1、https://m.weibo.cn/status/4404101091169383,当然这种内容不适合在 PC 端的浏览器打开,排版不好。


代码实现
本文重点讲述 id、mid 的相互转换,其它的概念例如 uid、url 不再赘述,读者可以参考备注中的内容。
在此提前说明,下文中涉及的代码已经被我上传至 GitHub:weibo_util.py ,读者可以提前下载查看。
注意,涉及到的 62 进制表示从 0 到 9、从 a 到 z、从 A 到 Z 一共 62 个字符。
1、id 转为 mid 的思路,例如:I1IGF4Ud1,有 9 个字符,从后开始以 4 个字符为单位进行拆分,拆分为:I、1IGF、4Ud1,然后再分别把它们转为 62 进制对应的 10 进制数值,得到:44、0410109【不足 7 位在前面补 0】、1169383。紧接着再拼接所有的结果,得到最终的 mid:4404101091169383。
Python 代码逻辑很简洁,主要 Python 代码逻辑如下:
1 | # id 转换为 mid |
2、mid 转为 id 的思路,例如:4404101091169383,有 18 个字符,从后开始以 7 个字符为单位进行拆分,拆分为:44、410109【前面有 0 的直接去除】、1169383,然后再分别把它们转为 10 进制数值对应的 62 进制字符串,得到:I、1IGF、4Ud1。紧接着再拼接所有的结果,得到最终的 id:I1IGF4Ud1。
Python 代码逻辑很简洁,主要 Python 代码逻辑如下:
1 | # mid 转换为 id |
3、以上内容运行单元测试后结果截图如下:

备注
关于 Java 版本的实现,可以参考我的另外一篇博客:微博 url mid 相互转换算法实现 - Java 版本 。

