下午和朋友聊天时,说到新浪微博,都感觉其火爆程度不容忽视,于是回家后立马就对之前的新浪微博接口进行了改造。首先站点登录接口,这个大部分网站 都有了,唯一还需要完善的就是发内容时同步发送到微博上去,其实这个也挺简单,不过在完善自身网站内容的时候,发现了一个很有意思的东西,那就是新浪微博 的超短URL。
先说下微博接口,这个接口我目前是做在了uchome上,其他类型的网站也可以照办原理进行改造。
第一,接口登录,这个不用说了,新浪提供的例子上都有
第二,内容同步发送。这个首先在发布页判断用户是不是通过新浪微博接口登录,如果是,则显示同步发送选项,例如:
判断用户来自新浪的方法,在用户通过接口登录后,用cookie保存相关数据,再在发布页进行判断。
第三,对提交的内容要进行处理,别忘了新浪微博只允许140个的字符,还有相关的HTML标签也得去掉,比如里面添加的表情。
第四,通过微博发送接口提供的方法upload和update把内容发送出去,upload是发送文字内容和图片,update只发送文字。
通过以上简单几步就把内容同时发送到了微博,接下来说下实现新浪微博短URL的方法
今天回家后几乎一直在弄这个问题,原因是走了弯路,短URL是由a-zA-Z0-9这个62个字符中的其中任意6个组合而成,组合后的总数总共有 500多亿个,之前一直想用十六进制位运算,累加进位,但是始终不成功,后来在网上看了下,说是把原URL进行MD5后再进行位运算,得到4种组合随意取 一种,但是结果也会出现重复的情况,尽管概率很小,所以这种方法也被pass掉,最后琢磨了大半晚上,终于做出一种绝不会出现重复结果的算法。
首先肯定的说,这62个字符随意取其中6个组合,组合数量高达500多亿,如果把数字和字符组合做一个映射关系,那不就只能得到唯一的字符串了吗, 比如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。
简单举个例子
提供的字符只有a,b,c,d 进行洗牌打乱后为 b,a,d,c 取其中任意3个字符为一个字符串组合,其组合数量是64个
那么我进行URL转换的时候首先把原URL插入到数据库,再根据数据库插入返回的新ID,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是
bbb
同理 ID为2时,字符串组合为
bba
依次类推
3——bbd
4——bbc
5——bab
6——baa
7——bad
8——bac
……
直至到达64种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。
O my God,都凌晨3点半了,先写到这里,方法已经告诉大家了,把方法的思路转化为代码就能实现短URL,可以参考我用uchome记录功能改造的微博,也是按这个算法实现的超短URL。
0 条评论。