原理:

新浪微博的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;
}
}

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

  1. 微博地址url(id)与mid的相互转换

    关键字:新浪 微博 url id mid 互相转换地址:http://www.cnblogs.com/txw1958/archive/2012/12/07/weibo-id-to-mid.html 通 ...

  2. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  3. 生成微博授权URL及回调地址

    1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...

  4. Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL

    Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...

  5. 微博转发关系采集,可拓展关键字采集,评论采集(Java版)

    微博模拟登录获取cookis,配置采集深度,采集一条微博转发关系页面,同时解析页面,生成一条微博的传播图,数据集可做微博影响力分析和传播分析 gitthub:https://github.com/ch ...

  6. 微博excel数据清洗(Java版)

    微博数据清洗(Java版) 原创 2013年12月10日 10:58:24 2979 大数据公益大学提供的一份数据,义务处理一下,原始数据是Excel,含有html标签,如下:   要求清洗掉html ...

  7. 03生成微博授权URL接口

    1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...

  8. 生成微博授权url接口

    1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...

  9. paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.

    paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结. 各种语言总结比较,脚本php.python果然是方便.简短,实用. uapi : get_w ...

随机推荐

  1. jQuery学习笔记——弹出对话框

    引用jQuery库文件的<script>标签,必须放在引用自定义脚本文件的<script>标签之前.否则,在编写的代码中将不能引用到jQuery框架 <script ty ...

  2. python中配置文件写法

    import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) print(BASE_DIR) USE ...

  3. yum安装指定(特定)版本(旧版本)软件包的方法

    在命令行里输入: yum list SDL 注意这里类库的名字是区别大小写的. 参考 http://www.dabu.info/yum-install-specific-version-old-pac ...

  4. CSS 控制Html页面高度导致抖动问题的原因

    CSS 控制Html页面高度导致抖动,这类由高度导致页面抖动的问题,其实究其根本原因是滚动条是否显示导致的 在CSS中添加如下代码: html,body{ overflow-y:scroll;} ht ...

  5. cannot start session without errors

    访问phpmyadmin出现如标题错误,解决方案如下: cd /var/lib/php 更改目录权限chown nginx:nginx -R session/ That's All!

  6. adapter(转自Devin Zhang)

    1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(ListView,GridView)等地方都需要用到Adapter.如下图直 ...

  7. CPC CPM

    计算广告的分类: 根据广告主的计费方式,可以分为 千次展现付费 CPM(cost per thousand impressions) 主要用于品牌曝光,例如钻展业务 每次点击扣费 CPC(cost p ...

  8. input实时监听value change

    oninput ie9+,otheronpropertychange  ie6-8 js使用 var el = docuemnt.getElementById('id'); if('oninput' ...

  9. swift错误和异常处理

    异常 (exception) 和错误 (error). 在 Objective-C 开发中,异常往往是由程序员的错误导致的 app 无法继续运行,比如我们向一个无法响应某个消息的NSObject 对象 ...

  10. linq/EF/lambda 比较字符串日期时间大小

    在使用EF时,想要比较字符串类型的日期时,参考以下: SQL语句: 1 2 3 4 1)select * from TableName where StartTime > '2015-04-08 ...