新浪微博 ID与MID互转 (62进制)

最近在做相和新浪微博相关的项目,因为抓取回来的微博JOSN中,ID和MID都是一样的。而客户又要求可以打开单条微博的查看页面。

本来SDK中是有QueryMID的功能的,但苦于调用次数的限制(一小时100下好像),而微博却又是海量的(其实就几千条啦)。

(http://weibo.com/2121718653/yvsAefokR  <-- 这个就是传说中的MID

在网上搜了好一会,只看到URL转ID的,没看到ID转URL的,实在无奈之下,只好自己写了一个。

参考了某网友的一篇文章:http://www.cnblogs.com/beijia/archive/2011/11/22/62ToInt.html

照着修修补补,写了这样一个类,其中除了原作者的MID转ID外,还可以ID转MID。(奇怪为啥没人有这样的需求呢?搜不到?)

不废话了,马上看代码,复制了随便用哈。

    public class WeiboHelper
    {
        private static String str62keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        public static String IntToEnode62(Int64 int10)
        {
            string s62 = "";
            int r = 0;
            while (int10 != 0) {
                r = Convert.ToInt32(int10 % 62);
                s62 = str62keys[r] + s62;
                int10 = (Int64)Math.Floor(int10 / 62.0);
            }
            return s62;
        }

        public static Int64 Encode62ToInt(String str62)
        {
            Int64 i10 = 0;
            for (var i = 0; i < str62.Length; i++)
            {
                double n = str62.Length - i - 1;
                i10 += Convert.ToInt64(str62keys.IndexOf(str62[i]) * Math.Pow(62, n));
            }
            return i10;
        }

        public static string Mid2Id(string str62) //yvr29p8dG
        {
            String id = "";
            for (int i = str62.Length - 4; i > -4; i = i - 4) //从最后往前以4字节为一组读取字符
            {
                int offset = i < 0 ? 0 : i;
                int len = i < 0 ? str62.Length % 4 : 4;
                String str = Encode62ToInt(str62.Substring(offset, len)).ToString();

                if (offset > 0) str = str.PadLeft(7, '0'); //若不是第一组,则不足7位补0

                id = str + id;
            }
            return id;
        }

        public static string Id2Mid(string str10) //3474920895989800
        {
            string mid = "";
            for (int i = str10.Length - 7; i > -7; i = i - 7) //从最后往前以7字节为一组读取字符
            {
                int offset = i < 0 ? 0 : i;
                int len = i < 0 ? str10.Length % 7 : 7;
                var str = IntToEnode62(Convert.ToInt64(str10.Substring(offset, len)));
                mid = str + mid;
            }
            return mid;
        }
    }


你可能感兴趣的:(String,新浪微博,url,Class)