微博地址url(id)与mid的相互转换 Java版

原理:

新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分.

第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分(蓝色)为一串貌似随机的字符串.

如果通过方法能计算出蓝色字串与返回的数组里的对应关系则好解决多了.

首先分组蓝色字串 ,从后往前4个字符一组,得到以下三组字符:
z
8Elg
BLeQ

将它们分别转换成62进制的数值则为 35, 2061702, 8999724  将它们组合起来就是一串 3520617028999724 类似这样的字串

通过发现返回的二维数组里有个 [mid]的字段,其返回结果为 3520617028999724.刚好是对应的.

http://weibo.com/aj/v6/mblog/info/big?ajwvr=6&id=3919740416635598&page=1

package step0;

/**
 *
    * @ClassName: Mid2IdUtil Java版
    * @Description:  新浪uid转url (id转mid)
    * @author zeze
    * @date 2016年4月10日 上午10:49:40
    *
 */
public class Id2MidUtil {
    public static void main(String[] args) {
        System.out.println(Uid2Mid("Aw8Wrzaes"));
        System.out.println(Mid2Uid("3676608718380816"));//Mid2Id
    }
    private static String[] str62keys = { "0", "1", "2", "3", "4", "5", "6",
            "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
            "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
            "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
            "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
            "X", "Y", "Z" };

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

     //62进制转成10进制
    public static String Str62toInt(String str62)
    {
        long i64 = 0;
        for (int i = 0; i < str62.length(); i++)
        {
            long Vi = (long)Math.pow(62, (str62.length() - i - 1));
            String t = str62.substring(i,i+1);

            i64 += Vi * findindex(t);
        }
       // System.out.println(i64);
        return Long.toString(i64);
    }

    public static int findindex(String t)
    {
        int index=0;
        for(int i=0;i<str62keys.length;i++)
        {
            if(str62keys[i].equals(t)){
                index=i;
                break;
            }
        }
        return index;
    }

     public static String Uid2Mid(String mid)
        {
            String id = "";
            for (int i = mid.length() - 4; i > -4; i = i - 4) //从最后往前以4字节为一组读取URL字符
            {
                int offset1 = i < 0 ? 0 : i;
                int len = i < 0 ? mid.length() % 4 : 4;

                String str = mid.substring(offset1, offset1+len);
               // System.out.println(offset1+" "+len+" "+str);

                str = Str62toInt(str);

                if (offset1 > 0) //若不是第一组,则不足7位补0
                {
                    while (str.length() < 7)
                    {
                        str = "0" + str;
                    }
                }
                id = str + id;
            }

            return id;
        }

    public static String Mid2Uid(String str10) {
        String mid = "";
        int count = 1 ;
        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;
            String temp = str10.substring(offset, offset + len);
            String url =IntToEnode62(Integer.valueOf(temp));
            if(count!=3){//z xghm uXym 生成的链接从右往左的前2组,4位一组,不足4位的补0
                for(int j=0;j<4-url.length();j++){
                    url = "0"+url;
                }
            }
            mid = url+mid;
                      count++;
               }
        return mid;
    }
}
时间: 2024-10-24 13:58:47

微博地址url(id)与mid的相互转换 Java版的相关文章

微博URL短网址生成算法原理及(java版、php版实现实例)

短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接. 例如:http://t.cn/SzjPjA 短网址服务,可能很多朋友都已经不再陌生,现在大部分微博.手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场.估计很多朋友现在也正在使用. 看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个

微博excel数据清洗(Java版)

微博数据清洗(Java版) 原创 2013年12月10日 10:58:24 2979 大数据公益大学提供的一份数据,义务处理一下,原始数据是Excel,含有html标签,如下:   要求清洗掉html标签,和微博内容中的url地址. 主要分为两部分: 1.处理文本,清洗数据. 2.处理excel读写操作. 上代码: ExcelUtil类,包含Excel2003-2007的读写操作,Excel使用Apache POI进行操作,需要jar包如下: [java] view plain copy pac

PHP网站实现地址URL重定向

网站建设中,通常会用到网站地址URL的重定向,这样的好处是有利于你网站的SEO优化,也就是让你的网站实现伪静态,下面简单介绍一下实现的两种方法: 1.在Apache配置文件中设置重定向 首先找到Apache配置文件httpd.conf,在配置文件中找到下面代码 LoadModule rewrite_module modules/mod_rewrite.so,将其打开(就是将前面#去除). 然后打开输出phpinfo()函数,如果在模块中开启了mod_rewrite模块,就说明上面一步成功啦,如下

Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php

Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php 1. RFC2396标准 including HTML 4.01 section 17.13.4, and also RFC 1866 (which is supercededby the W3C HTML recommendations). 在form的ContextType是[x-www-form-urlencoded]的时候会对form中的键/值对进行编码,空格被转义成+,

C#获取本地计算机名,IP,MAC地址,硬盘ID

using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebPa

JDK8 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

JDK8 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装时最好在C盘根目录下建立一个目录如C:\Java8 之后设置系统变量JAVA_HOME=C:\Java8 Path=C:\Java8\bin classpath=C:\Java8\lib\dt.jar;C:\Java8\lib\tools.jar; 设置完毕后打开cmd窗口,以java命令,javac命令,

修改wordpress地址(URL)导致不能登录后台

闲来无事,看见 设置--常规 有个WordPress地址(URL)和站点地址(URL),手贱把两个地址后面的/wordpress 后缀去掉了,结果造成博客后台无法登录,文章页面排版混乱. 解决办法: Linux中进入mysql mysql> show databases; #显示有哪些数据库 mysql> use wordpress;  #选择使用wordpress的数据库 mysql> show tables;  #显示有哪些表 select * from wp_options lim

Twitter的分布式自增ID算法snowflake (Java版)

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成. 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务. 结构 snowflake的结构如下(每部分用

微信服务器配置---服务器地址(URL) :报错 token验证失败

服务器配置---服务器地址(URL) :报错 token验证失败. 原因之一是: 开发调试环境(本机) 的ip变化,没有及时配置ip白名单. 也可以反向验证:在配置好jeewx工程之公众号信息后,可以点击按钮“重置微信token”,看看是否报错40164: 微信错误:errcode=40164,该错误信息:无效ip 地址,不在白名单中. 原因之二是: netapp的隧道变化了. 原文地址:https://www.cnblogs.com/wuxingang/p/11240050.html