关键字:新浪 微博 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的相互转换的更多相关文章

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

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

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

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

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

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

  4. 生成微博授权url接口

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

  5. 04.vue获取微博授权URL

    1.在Vue页面加载时动态发送请求获取微博授 权url 1.1 在 components\common\lab_header.vue 中写oauth动态获取微 博授权**URL // 获取微博登录地址 ...

  6. vue获取微博授权URL

    1.在Vue**页面加载时动态发送请求获取微博授权url 1.1 在 components\common\lab_header.vue 中写oauth动态获取微 博授权URL // 获取微博登录地址 ...

  7. 用JAVASCRIPT获得当前页的来路地址URL的五种方法

    var rUrl;rUrl = document.referrer; //获得当前页的来路地址URL rUrl = window.parent.location; //获得父窗口的地址URL rUrl ...

  8. 利用<meta http-equiv="refresh" content="0;URL=?id='.$id.'" />一条一条的更新数据

    <meta http-equiv="refresh" content="0;URL=?id='.$id.'" /> 解释:页面定时刷新,后面加url ...

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

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

随机推荐

  1. 七步从AngularJS菜鸟到专家(7):Routing

    这是"AngularJS – 七步从菜鸟到专家"系列的第七篇. 在第一篇,我们展示了如何開始搭建一个AngularaJS应用.在第四.五篇我们讨论了Angular内建的directives.上一篇了解 ...

  2. Android自定义组件系列【11】——实现3D立体旋转效果

    今天在网上看到一篇文章写关于Android实现3D旋转(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt2/inde ...

  3. python高级学习目录

    1. Linux介绍.命令1.1. 操作系统(科普章节) 1.2. 操作系统的发展史(科普章节) 1.3. 文件和目录 1.4. Ubuntu 图形界面入门 1.5. Linux 命令的基本使用 1. ...

  4. Vue.js如何划分组件

    常见的一些页面,大家坐在一起敲代码就可以了,做完这个页面再做别的页面,但是作为一个功能复杂的系统,尤其是使用一些适合模块化开发的框架,这样会显得效率很低,那么我们就单纯的看在Vue里面如何划分组件的. ...

  5. [ES7] Await multi promises sequentially or concurrently

    Somtime 'async await' can have a bad effect on code proferemence. Let's take a look the below exampl ...

  6. [Angular2] Map keyboards events to Function

    The idea is when we tape the arrow keys on the keyboard, we want the ball move accodingly. const lef ...

  7. Android 各个版本号WebView

    转载请注明出处   http://blog.csdn.net/typename/ powered by miechal zhao : miechalzhao@gmail.com 前言: 依据Googl ...

  8. c# 调用ArcEngine的GP工具

    转自原文c# 调用ArcEngine的GP工具,AE调用GP工具 IAoInitialize m_AoInitialize = new AoInitializeClass(); esriLicense ...

  9. CentOS7.1 KVM虚拟化之虚拟机快照(5)

    这里用之前克隆的虚拟机vm1-clone进行快照操作 注: 1.快照实际上做的是虚拟机的XML配置文件,默认快照XML文件在/var/lib/libvirt/qemu/snapshot/虚拟机名/下 ...

  10. Java-Maven项目引入UEditor图片上传组件jar包类库的5种方式

    最近,硬是和百度的UEditor组件杠上了.自己的个人官网项目,很容易就搞定了,公司的项目,尼玛,各种问题.项目多了,环境复杂了,解决问题的方法也得不断调整. 项目用Maven管理jar包,用到了UE ...