新浪微博地址url字符与mid的相互转换算法及原理
来源:互联网 发布:河北师范大学网络教学 编辑:程序博客网 时间:2024/06/05 01:46
过新浪微博api接口发布微博成功后,会返回一个二维数组,这个返回的数组里有微博的内容,发布微博的用户信息等等.却没有所发布成功的微博的URL.很多时候如果要记录信息在数据库 则微博URL应该必不可少.通过新浪微博论坛搜索,发现有以下方法.
原理:
新浪微博的URL都是如:http://weibo.com/1247667622/l4EV85aqp 这样三部分.
第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分(蓝色)为一串貌似随机的字符串.
如果通过方法能计算出蓝色字串与返回的数组里的对应关系则好解决多了.
首先分组蓝色字串 ,从后往前4个字符一组,得到以下三组字符:
l
4EV8
5aqp
将它们分别转换成62进制的数值则为 21,111061, 1231717 将它们组合起来就是一串 2111106141231717 类似这样的字串
通过发现返回的二维数组里有个 [mid]的字段,其返回结果为 2111106141231717.刚好是对应的.
故:通过api接口发布微博,接收其成功后返回的数组,提取其里面的 mid 将mid转化成 62进字字串,再将发布微博的UID组合.
原码
附1:写了个mid与url相互转换的Javascript类(来自网络)
附2:php版 字串转id函数
function sinaWburl2ID($url) {$surl[2] = str62to10(substr($url, strlen($url) - 4, 4));$surl[1] = str62to10(substr($url, strlen($url) - 8, 4));$surl[0] = str62to10(substr($url, 0, strlen($url) - 8));$int10 = $surl[0] . $surl[1] . $surl[2];return ltrim($int10, '0');}function str62to10($str62) { //62进制到10进制$strarry = str_split($str62);$str = 0;for ($i = 0; $i < strlen($str62); $i++) {$vi = Pow(62, (strlen($str62) - $i -1)); $str += $vi * str62keys($strarry[$i]);}$str = str_pad($str, 7, "0", STR_PAD_LEFT);return $str;} function str62keys($ks) //62进制字典{$str62keys = array ("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");return array_search($ks, $str62keys);}echo sinaWburl2ID('l4EV85aqp '); //调用
php版Mid转Str版
function midToStr($mid) {settype($mid, 'string');$mid_length = strlen($mid);$url = '';$str = strrev($mid);$str = str_split($str, 7); foreach ($str as $v) {$char = intTo62(strrev($v));$char = str_pad($char, 4, "0");$url .= $char;} $url_str = strrev($url); return ltrim($url_str, '0');} function str62keys_int_62($key) //62进制字典{$str62keys = array ("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");return $str62keys[$key];} /* url 10 进制 转62进制*/ function intTo62($int10) {$s62 = '';$r = 0;while ($int10 != 0) {$r = $int10 % 62;$s62 .= str62keys_int_62($r);$int10 = floor($int10 / 62);} return $s62;}echo midToStr($mid);//调用
新浪API方法
$char_id='y6D72AsN7';//通过url 字符id获取数字mid$re = json_decode(file_get_contents("http://api.t.sina.com.cn/queryid.json?mid=$char_id&isBase62=1&type=1"));echo $id = $re->id; //通过数字mid获取url 字符id$re = json_decode(file_get_contents("http://api.t.sina.com.cn/querymid.json?id=$id"));echo $re->mid;
- 新浪微博地址url字符与mid的相互转换算法及原理
- 新浪微博地址url字符与mid的相互转换算法及原理
- 微博地址url(id)与mid的相互转换
- 微博地址url(id)与mid的相互转换
- 微博地址url(id)与mid的相互转换
- 新浪微博url与mid相互转换(自己总结整理各种语言版本)
- 实现一个新浪微博 MID 转换算法
- C++作业02_01: 新浪微博的消息 ID ( MID ) 有字符型和数字型两种形态,可以互相转换
- 字节流与字符流的区别及相互转换
- 获得微博的URL中的MID
- 新浪微博 ID与MID互转 (62进制)
- 新浪微博的id和mid互相转换(10进制和62进制转换)
- 新浪微博URL中的MID和微博id互转
- IP地址与整数的相互转换
- 整型与字符型的相互转换
- ascii码与字符的相互转换
- Unicode字符与GB2312的相互转换
- Python字符与数字的相互转换
- 设置首行缩进 .html
- redhat vi 无法保存中文信息
- postgres 聚集函数编写 教程
- SQL Server 磁盘空间告急(磁盘扩容)
- 交换机的背板带宽,交换容量,包转发率区别
- 新浪微博地址url字符与mid的相互转换算法及原理
- struts2.0中struts.xml配置文件详解
- new operator、operator new 、placement new三者之间的区别与联系
- java 利用DOM写入XML文档
- CSS背景图拉伸自适应尺寸,全浏览器兼容
- Microsoft C++ exception: EEResourceException(orig. IS2120@BG57IV3)
- C语言中的free函数
- Examples of crontab expressions
- ubuntu 下打开windows 文件 程序代码 出现乱码,或者windows打开ubuntu下文件乱码