关键字:新浪 微博 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. Spring Cloud项目

    如何使用windows版Docker并在IntelliJ IDEA使用Docker运行Spring Cloud项目   如何使用windows版Docker并在IntelliJ IDEA使用Docke ...

  2. Nginx+Memcached+Tomcat集群配置(MSM--win7 64bit)

    本次主要是在win7 64 上演示操作. web应用构建 Memcached安装配置启动 Tomcat配置 所需jar包 memcached-session-manager 序列化 contextxm ...

  3. HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第 ...

  4. maven pom.xml基本使用方法

    pom.xml文件是Maven进行工作的主要配置文件.在这个文件里我们能够配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:能够配置Maven项目须要 ...

  5. 如何去掉windows2003的自动锁定(每离开一会都会出现这个界面,不想让它出现)

    http://zhidao.baidu.com/link?url=SOCv57C-hX_3f0Xl0J0RFIVXpowXk73zdQd2B-wMUzYOm5E_N397bw_UkX4uLPlAiWQ ...

  6. JM-2 jQuery Mobile的使用(多看学习视频)

    JM-2 jQuery Mobile的使用(多看学习视频) 一.总结 一句话总结:前端框架的使用全都一个样,本质都是css和js,引入文件也是这些.使用都是看手册,超简单. 1.jQuery Mobi ...

  7. CSU1323: ZZY and his little friends

    Description zzy养了一只小怪兽和N只凹凸曼,单挑的话每只凹凸曼都不是小怪兽的对手,所以必须由两只凹凸曼合作来和小怪兽战斗.凹凸曼A和凹凸曼B合作的战斗力为他们战斗力的异或值.现在由zzy ...

  8. Javascript中的DOM实现显示鼠标的空间位置

    为了显示鼠标相对于浏览器的位置(相对于屏幕和页面类似),我们能够利用click事件,获得关于鼠标单击的事件对象event.这个事件对象里的clientX和clientY包括了鼠标的位置信息,所以我突发 ...

  9. HDU 3215 The first place of 2^n (数论-水题)

    The first place of 2^n Problem Description LMY and YY are mathematics and number theory lovers. They ...

  10. 数组[0]和[firstobject]的区别

    数组[0]和[firstobject]的区别   [0]:数组为空时回报错 [firstobject]:数组为空时回返回nil