微博地址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;
}
}
微博地址url(id)与mid的相互转换 Java版的更多相关文章
- 微博地址url(id)与mid的相互转换
关键字:新浪 微博 url id mid 互相转换地址:http://www.cnblogs.com/txw1958/archive/2012/12/07/weibo-id-to-mid.html 通 ...
- 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)
短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...
- 生成微博授权URL及回调地址
1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...
- Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL
Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...
- 微博转发关系采集,可拓展关键字采集,评论采集(Java版)
微博模拟登录获取cookis,配置采集深度,采集一条微博转发关系页面,同时解析页面,生成一条微博的传播图,数据集可做微博影响力分析和传播分析 gitthub:https://github.com/ch ...
- 微博excel数据清洗(Java版)
微博数据清洗(Java版) 原创 2013年12月10日 10:58:24 2979 大数据公益大学提供的一份数据,义务处理一下,原始数据是Excel,含有html标签,如下: 要求清洗掉html ...
- 03生成微博授权URL接口
1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...
- 生成微博授权url接口
1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...
- paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结. 各种语言总结比较,脚本php.python果然是方便.简短,实用. uapi : get_w ...
随机推荐
- fileinput模块
刚才练习的时候,报如下错误: AttributeError: module 'fileinput' has no attribute 'input',后来Google参考这篇文章https://mai ...
- LaTex 使用 - 配置
Reference Link: http://www.howtotex.com/howto/installing-latex-on-windows/ MikTeX:http://miktex.org/ ...
- Apple Instruments
启动Xcode,选择Xcode > Open Developer Tool > Instruments. 如果无法选择当前设备,请尝试重启设备. 将设备设置为Use for develop ...
- 使用 Object.create 创建对象,super 关键字,class 关键字
ECMAScript 5 中引入了一个新方法:Object.create().可以调用这个方法来创建一个新对象.新对象的原型就是调用 create 方法时传入的第一个参数: var a = {a: 1 ...
- Swift学习一
// 定义一个类 class AClass { } // 数据转换 var a = Int(4.555) // 可选值 var num: Int? = Int("23k") // ...
- C语言中qsort函数用法
C语言中qsort函数用法-示例分析 本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...
- 防SQL注入代码(ASP版)
<% Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份 头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向页面, ...
- python 默认全局变量
python 内置默认全局变量print (vars()) __doc__ #py文件头部的注释 '''我是一个注释例子''' print (vars()) __file__ #当前文件路劲__pac ...
- redis使用watch完成秒杀抢购功能(转)
redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表. 它的优点如下: 1. 首先选用内 ...
- java设计模式设计模式
JAVA设计模式之单例模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一 ...