微博地址url(id)与mid的相互转换
关键字:新浪 微博 url id mid 互相转换
地址:http://www.cnblogs.com/txw1958/archive/2012/12/07/weibo-id-to-mid.html
通过新浪微博api接口发布微博成功后,会返回一个二维数组,这个返回的数组里有微博的内容,发布微博的用户信息等等.却没有所发布成功的微博的URL.很多时候如果要记录信息在数据库 则微博URL应该必不可少.通过新浪微博论坛搜索,发现有以下方法.
原理:
新浪微博的URL都是如:http://weibo.com//z8ElgBLeQ这样三部分.
第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分(蓝色)为一串貌似随机的字符串.
如果通过方法能计算出蓝色字串与返回的数组里的对应关系则好解决多了.
首先分组蓝色字串 ,从后往前4个字符一组,得到以下三组字符:
z
8Elg
BLeQ
将它们分别转换成62进制的数值则为 35, 2061702, 8999724 将它们组合起来就是一串 3520617028999724 类似这样的字串
通过发现返回的二维数组里有个 [mid]的字段,其返回结果为 3520617028999724.刚好是对应的.
故:通过api接口发布微博,接收其成功后返回的数组,提取其里面的 mid 将mid转化成 62进字字串,再将发布微博的UID组合.
C#源码
/// <summary>
/// 从一条新浪微博地址中获取这条微博的id
/// </summary>
/// <param name="url">一条微博地址</param>
/// <returns>微博id</returns>
public static string GetIdFromUrl(string url)
{
string mid = GetMidFromUrl(url); if (string.IsNullOrEmpty(mid))
{
return string.Empty;
}
else
{
return Mid2Id(mid);
}
} /// <summary>
/// 从一条新浪微博地址中获取这条微博的mid
/// </summary>
/// <param name="url">一条微博地址</param>
/// <returns>微博mid</returns>
public static string GetMidFromUrl(string url)
{
if (string.IsNullOrEmpty(url))
{
return "";
}
if (url.IndexOf('?') != -)
{
url = url.Substring(, url.IndexOf('?'));
}
Regex reg = new Regex(@"^http://(e\.)?weibo\.com/[0-9a-zA-Z]+/(?<id>[0-9a-zA-Z]+)$", RegexOptions.IgnoreCase);
Match match = reg.Match(url);
if (match.Success)
{
return match.Result("${id}");
}
return "";
} /// <summary>
/// 将新浪微博mid转换成id
/// </summary>
/// <param name="mid">微博mid</param>
/// <returns>返回微博的id</returns>
public static string Mid2Id(string mid)
{
string id = "";
for (int i = mid.Length - ; i > -; i = i - ) //从最后往前以4字节为一组读取URL字符
{
int offset1 = i < ? : i;
int len = i < ? mid.Length % : ;
var str = mid.Substring(offset1, len); str = Str62toInt(str);
if (offset1 > ) //若不是第一组,则不足7位补0
{
while (str.Length < )
{
str = "" + str;
}
}
id = str + id;
} return id;
} /// <summary>
/// 新浪微博id转换为mid
/// </summary>
/// <param name="id">微博id</param>
/// <returns>返回微博的mid</returns>
public static string Id2Mid(string id)
{
string mid = "", strTemp;
int startIdex, len; for (var i = id.Length - ; i > -; i = i - ) //从最后往前以7字节为一组读取mid
{
startIdex = i < ? : i;
len = i < ? id.Length % : ;
strTemp = id.Substring(startIdex, len);
mid = IntToStr62(Convert.ToInt32(strTemp)) + mid;
}
return mid;
} //62进制转成10进制
public static string Str62toInt(string str62)
{
Int64 i64 = ;
for (int i = ; i < str62.Length; i++)
{
Int64 Vi = (Int64)Math.Pow(, (str62.Length - i - ));
char t = str62[i];
i64 += Vi * GetInt10(t.ToString());
}
return i64.ToString();
}
//10进制转成62进制
public static string IntToStr62(int int10)
{
string s62 = "";
int r = ;
while (int10 != )
{
r = int10 % ;
s62 = Get62key(r) + s62;
int10 = int10 / ;
}
return s62;
}
// 62进制字典
private static string str62keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVTXYZ";
//获取key对应的62进制整数
private static Int64 GetInt10(string key)
{
return str62keys.IndexOf(key);
}
//获取62进制整数对应的key
private static string Get62key(int int10)
{
if (int10 < || int10 > )
return "";
return str62keys.Substring(int10, );
}
新浪提供的API 直接在浏览器中输入
http://api.t.sina.com.cn/queryid.json?mid=z8ElgBLeQ&isBase62=1&type=1
返回
{"id":""} http://api.t.sina.com.cn/querymid.json?id=3520617028999724
返回
{"mid":"z8ElgBLeQ"}
微博地址url(id)与mid的相互转换的更多相关文章
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
- 生成微博授权URL及回调地址
1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...
- 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 ...
- 04.vue获取微博授权URL
1.在Vue页面加载时动态发送请求获取微博授 权url 1.1 在 components\common\lab_header.vue 中写oauth动态获取微 博授权**URL // 获取微博登录地址 ...
- vue获取微博授权URL
1.在Vue**页面加载时动态发送请求获取微博授权url 1.1 在 components\common\lab_header.vue 中写oauth动态获取微 博授权URL // 获取微博登录地址 ...
- 用JAVASCRIPT获得当前页的来路地址URL的五种方法
var rUrl;rUrl = document.referrer; //获得当前页的来路地址URL rUrl = window.parent.location; //获得父窗口的地址URL rUrl ...
- 利用<meta http-equiv="refresh" content="0;URL=?id='.$id.'" />一条一条的更新数据
<meta http-equiv="refresh" content="0;URL=?id='.$id.'" /> 解释:页面定时刷新,后面加url ...
- Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL
Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...
随机推荐
- 29、应用调试之使用GDB来调试应用程序
说明:gdb可以实现源代码单步调试 原理: 1.gdb在PC机上运行,gdbserver在arm开发板上运行,gdbserver在开发板上相当于父进程,应用相当于子进程,PC上gdb发命令给gdbse ...
- [Node] Using dotenv to config env variables
Install: npm install dotenv --save For example, we can store the sensitive information or env relate ...
- 分层抽样(Stratified sampling)
1. 基本概念 统计学理论中,分层抽样针对的是对一个总体(population)进行抽样的方法.尤其适用于当总体内部,子总体(subpopulations)间差异较大时.每一个 subpopulati ...
- WCF走你~异常篇(永久更新...)
下面是我个人在进行WCF开发时,遇到的问题及相关的解决方法,供大家一起学习 1. ......HTTP 响应时发生错误.这可能是由于服务终结点绑定未使用 HTTP 协议造成的. 解决:把返回的实体类添 ...
- thinkphp3.2使用join联合查询
$members=$model->table('zhope_card A') ->join('zhope_user U ON A.adduser=U.id',"LEFT" ...
- IfSpeed 带宽计算
http://www.360doc.com/content/11/0304/22/2614615_98214710.shtml http://www.cisco.com/support/zh/477/ ...
- IIS最大并发连接数 = 队列长度 + IIS最大并发工作线程数
深入理解IIS的多线程工作机制 首先让我们来看看IIS里面的这2个数字:最大并发连接数,队列长度.先说这2个数字在哪里看. 最大并发连接数:在IIS中选中一个网站,右键网站名称,在右键菜单中找到并 ...
- [转载]Surging教学视频资源汇总
surging是什么 surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zookeeper.Consul作为surging服务的注册中心,集成了哈希,随机,轮询.压力最小优先作 ...
- ios开发抽屉效果的封装使用
#import "DragerViewController.h" #define screenW [UIScreen mainScreen].bounds.size.width @ ...
- 使用oschina的gitserver
1.概要 事实上oschina的gitserver与github的几乎相同.只是既然是中国的gitserver,那么速度应该更快一些吧 2.注冊 链接https://git.oschina.net/, ...