好吧,这几天给人写微博应用,于是彻底给新浪微博跪了,关于微博信息的返回值,又是id,又是mid,然后还有一个base62的mid

然后在开放平台的文档上,ID和MID的类型都是int64,而且两个的值是不一样的,但是在实际测试过程中,新发出去微博返回的ID和MID是一样的,虽说猜测觉得目前ID和MID只是为了向下兼容比较老的数据才留出来的,现在都一样,但由于新浪还是留了queryid和querymid进行互转处理的接口,所以还是不敢随便去认为ID和MID一样。

既然id和mid都是int64的数字,那么这个base62的mid是什么呢,从我知道的来看,目前新浪微博的每个微博都有一个独立页面类似

http://www.weibo.com/*****/ywnwezFce

而这个后面的ywnwezFce就是base62的mid,查阅资料这是一个短网址变换,变换的方法则是base62,如果需要对MID进行变换的话可以使用微博API的querymid,但是新浪对于API的请求有次数限制,虽然说这个API支持批量转换,但还是自己来实现这个转化比较好,网上关于base62的代码很多了,但新浪微博的短网址又不只是简单的对id的int64进行base62,而是进行拆分之后分别base62后再连接,于是就用C#实现了一下


public String bst = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public String base62(String mid)
{
long int_mid = Int64.Parse(mid);
String result = "";
do
{
long a = int_mid % 62;
result = bst[(int)a] + result;
int_mid = (int_mid - a) / 62;
} while (int_mid > 0);
return result.PadLeft(4,'0');
}

public String getSinamid(String mid)
{
long int_mid = Int64.Parse(mid);
String result = "";
for (int i = mid.Length - 7; i > -7; i -= 7)
{
int offset1 = (i < 0) ? 0 : i;
int offset2 = i + 7;
String num = base62(mid.Substring(offset1, offset2 - offset1));
result = num + result;
}
return result;
}