-
URL短链接压缩算法 微博短链接原理解析
2019-07-24 12:00:10短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的sinaurl.cn,六度短网址6du.in等。 我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx 为什么...短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的sinaurl.cn,六度短网址6du.in等。
我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx
为什么要这样做的,原因我想有这样几点:
微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖色情,暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。
其实以上三点纯属个人观点,因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料):将长网址md5生成32位签名串,分为4段,每段8个字节;
对这四段循环处理,取8个字节,将他看成16进制串与0x3fffffff(30位1)与操作,即超过30位的忽略处理;
这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
总的md5串可以获得4个6位串;取里面的任意一个就可作为这个长url的短url地址;
很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。下面来看看程序部分:
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
public static string[] ShortUrl(string url)
{
//可以自定义生成MD5加密字符传前的混合KEY
string key = “Leejor”;
//要使用生成URL的字符
string[] chars = new string[]{
“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”,“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”
};//对传入网址进行MD5加密 string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5"); string[] resUrl = new string[4]; for (int i = 0; i < 4; i++) { //把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算 int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16); string outChars = string.Empty; for (int j = 0; j < 6; j++) { //把得到的值与0x0000003D进行位与运算,取得字符数组chars索引 int index = 0x0000003D & hexint; //把取得的字符相加 outChars += chars[index]; //每次循环按位右移5位 hexint = hexint >> 5; } //把字符串存入对应索引的输出数组 resUrl[i] = outChars; } return resUrl;
}
现在可以直接使用该方法,可以等到下面四组值:
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
ShortUrl(http://www.me3.cn)[0]; //得到值fAVfui
ShortUrl(http://www.me3.cn)[1]; //得到值3ayQry
ShortUrl(http://www.me3.cn)[2]; //得到值UZzyUr
ShortUrl(http://www.me3.cn)[3]; //得到值36rQZn在存放这个URL的数据方面,我个人推荐TTServer,有的朋友可以没有听说过,下面是这个数据库的介绍:
Tokyo Cabinet 是日本人 Mikio Hirabayashi(平林幹雄)のページ 开发的一款DBM数据库(注:大名鼎鼎的DBM数据库qdbm就是他开发的),该数据库读写非常快。insert:0.4sec/1000000 recordes(2500000qps),写入100万数据只需要0.4秒。search:0.33sec/1000000 recordes (3000000 qps),读取100万数据只需要0.33秒。
可以看到对于字典类型的数据Key/Value的查询,这个数据库可以说是我目前见过效率非常高的,况且他如此的小巧,用来对short url/long url的配对再好不过。
该系统使用6个短码字符来表示任何长度的网址。 有效的字符代码是ASCII ‘A’到’Z’和’0’的’5’,其中每个字符包含2 ^ 5(32)状态。 6短码字符可用于绘制32 ^ 6(1073741824)的网址
首先,你需要一个数据库表来存储和检索你映射的网址。
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
CREATE TABLE mappedURL (的CREATE TABLE mappedURL(
shortCode char(6) not null,
lognURL text not null,
PRIMARY KEY shortCodeInd (shortCode),
);其次,你需要定义一个算法将长的URL映射到短的URL。 算法上面已经介绍过了。
第三,你需要创建一个网页,从数据库的短网址的映射找到原始的URL,并重定向之。
-
java 新浪短链接_如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
2021-02-28 15:34:14如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成发布时间:2020-08-12 14:30:29来源:ITPUB博客阅读:73作者:文远大将军短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求...如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
发布时间:2020-08-12 14:30:29
来源:ITPUB博客
阅读:73
作者:文远大将军
短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问。目前国内最稳定最好用的是新浪T.cn短链接。
之前新浪提供了长链接转为短链接的API,可以把长链接转为t.cn/xxx这种格式的短链接。但是在前段时间新浪宣布关闭了之前几个流传在外的T.cn短链接的API接口。导致很多朋友都没有办法在使用新浪的T.cn短链!
今天小编就给大家分享一个仍然可以使用的新浪T.cn短链接的API接口。下面我来把接口以及调用文档跟大家说一下。
接口分享
接口地址:http://www.sinadwz.cn/sina.php?url_long=
http://www.baidu.com
接口说明:把上面的新浪短网址api接口的"
http://www.baidu.com"替换成需要生成的链接即可
接口文档
PHP调用演示:
$url = 'http://www.baidu.com';
$api_url = 'http://www.sinadwz.cn/sina.php?url_long=http://www.baidu.com;
$short_url = file_get_contents($api_url);
echo $short_url;
JAVA调用演示:
public static void main(String path[]) throws Exception {
URL u =new URL("http://www.sinadwz.cn/sina.php?url_long=http://www.baidu.com");
InputStream in = u.openStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
byte buf[] = new byte[1024];
int read = 0;
while ((read = in .read(buf)) > 0) {
out.write(buf, 0, read);
}
} finally {
if ( in != null) {
in .close();
}
}
byte b[] = out.toByteArray();
System.out.println(new String(b, "utf-8"));
}
Python调用演示:
import urllib, urllib2, sys
host = 'http://www.sinadwz.cn'
path = '/sina.php?'
method = 'GET'
querys = 'url_long=http%3A%2F%2Fwww.baidu.com'
bodys = {}
url = host + path + '?' + querys
request = urllib2.Request(url)
response = urllib2.urlopen(request)
content = response.read()
if (content):
print(content)
常见问题:
1、 我的推广链接转换成短链接的时候为什么参数丢失了?
答:你的推广链接中含有特殊字符,需要使用UTF8编码格式,将链接编码后重新生成!
2、接口没有返回结果,是什么情况?
答:偶尔会有延迟,如果长时间未返回,请检查链接格式是否正确
3、生成的短网址能使用多久?
答:生成的短链接都是永久有效的。
本文出自浪狐短网址:
http://www.sinadwz.cn/56ssew.html
转载请注明出处
-
Java实现使用压缩算法实现长链接到短链接的转换 并使用短链接访问真实链接的实践
2018-12-07 11:01:22最近要实现一个推广链接的长链接转换到短链接的功能,不能接的第三方接口,如何生成短连接网上这些都说的明明白白了,这里只讲如何通过短连接访问长链接即真实地址。首先说看一下: 转换原理: 将原url通过一系列...最近要实现一个推广链接的长链接转换到短链接的功能,不能接的第三方接口,如何生成短连接网上这些都说的明明白白了,这里只讲如何通过短连接访问长链接即真实地址。首先说看一下:
转换原理: 将原url通过一系列方式,转换成6位短码(只要能不重复,随便怎么方式都行);将长短链接存入数据库,形成一条对应关系;访问短链接的时候,在数据库找到对应的长链接,并通过重定向实现原url的访问;(如果你的转换方式能过还原,也可以不要数据库,但必须保证转换后的短码不能重复)数据库大概是这个样子。
如何生成短链接我就不说了,网上各种方法都可以用,生成的短链接其实一小段字符窜,然后在把域名端口拼接起来就好了。来看一下这个接口是如何实现的。
@RequestMapping("/{shortUrl}") public ModelAndView jumpLongLink(HttpServletRequest request, ModelAndView mav, @PathVariable("shortUrl")String shortUrl) { String longUrl = ""; String longurl = shorturlService.restoreUrl(shortUrl); if (longUrl!=null) { longUrl = longurl; } mav.setViewName("redirect:" + longUrl); return mav; }
第一行注解我就不讲了,{shortUrl}这个就是动态变化的生成的短链接,shorturlService.restoreUrl()方法是通过传入得短链接到库里查询对应的长链接即真实地址。然后转发重定向到真实的地址即可。完整的短链接本地访问:127.0.0.1/端口号/短链接,如:127.0.0.1/8888/2MnQFj,线上的访问地址:域名/短链接,如:www.baidu.com/2MnQFj,如果项目有拦截器,因为短链接是动态变化的,需要在前面加一层路径,像这样:127.0.0.1/8888/go/2MnQFj然后就完事了。
-
t.cn短链接生成 - 新浪短网址生成器压缩网址详细教程
2020-04-18 17:02:54t.cn短链接是新浪官方的短网址工具,提供在线将长链接缩短为最短形式的t.cn链接服务,生成的短网址跳转速度和访问兼容性没有任何影响,生成好的短网址永久有效,还可以通过对接调用api接口和批量生成的方式更加轻松...t.cn短链接是新浪官方的短网址工具,提供在线将长链接缩短为最短形式的t.cn链接服务,生成的短网址跳转速度和访问兼容性没有任何影响,生成好的短网址永久有效,还可以通过对接调用api接口和批量生成的方式更加轻松方便地进行网址压缩
背景
用途
制作
接口
日常生活中我们经常看到一些短信或者消息中出现开头为t.cn格式的链接,十分简短,但点开后会跳转到另一个很长的地址,其实这就是使用了新浪提供的网址缩短服务:t.cn短链接,以下是详细内容
背景
新浪最开始最火的产品是新浪博客,在那个博客流行的时代,大部分人都会开通博客,记录生活、分享经验、发表观点等,但由于生活节奏的逐渐加快,更多的人没有时间去写一篇洋洋洒洒几千字的优美博文,所以大部分人索性不写了。
可惜我现在连一张清晰的新浪博客图片都找不到了
随着快节奏生活时代的到来,短小精炼的微博再次成为热潮,微博的成功正是在于它的限制,144个字的限制让大家不得不将要表达的文字不断凝练压缩,因为经常要发链接,这时候t.cn短链接应运而生。
用途
不但是在微博里,因为其很多优点,被用在很多其他地方,备受追捧,2019年每天生成的t.cn短链接就达上十亿条,访问跳转就更不用说了,因为不是以营利为目的,微博也承受不住这种巨大的数据吞吐,终于于9月份,关闭了大部分的对外接口,正因如此,之前巨量的访问量给t.cn打下了坚实的大数据基础
制作
说了这么多,如何给自己的长链接制作一个永久的t.cn短链接?
第二步:把要缩短的网址填入输入框内,并点击按钮立即缩短
第三步:得到生成成功的短网址,复制该网址即可
同时也支持批量生成,一行一个就可以批量生成短网址
接口
如何将短网址功能接入程序中实时调用来缩短呢?
第一步:打开t.cn短链接api接口页面,查看接口文档
第二步根据接口文档接入api(不懂技术可找网站技术接入)
PHP调用代码:
1 $url = 'http://www.baidu.com'; 2 $api_url = 'http://url-t.cn/tcn/api?key=用户KEY/tcn_url?url='.urlencode($url); 3 $short_url = file_get_contents($api_url); 4 echo $short_url;
JAVA调用代码:
1 public static void main(String path[]) throws Exception { 2 URL u = new URL("http://url-t.cn/tcn/api?key=用户KEY&url=http%3A%2F%2Fwww.baidu.com"); 3 InputStream in = u.openStream(); 4 ByteArrayOutputStream out = new ByteArrayOutputStream(); 5 try { 6 byte buf[] = new byte[1024]; 7 int read = 0; 8 while ((read = in .read(buf)) > 0) { 9 out.write(buf, 0, read); 10 } 11 } finally { 12 if ( in != null) { 13 in .close(); 14 } 15 } 16 byte b[] = out.toByteArray(); 17 System.out.println(new String(b, "utf-8")); 18 }
python调用代码:
1 import urllib, urllib2, sys 2 3 host = 'http://url-t.cn' 4 path = '/tcn/api' 5 method = 'GET' 6 querys = 'key=用户KEY&url=http%3A%2F%2Fwww.baidu.com' 7 bodys = {} 8 url = host + path + '?' + querys 9 10 request = urllib2.Request(url) 11 response = urllib2.urlopen(request) 12 content = response.read() 13 if (content): 14 print(content)
接口使用特别提示:
① 接入时,把 “http://www.baidu.com”换成需要缩短的原始链接,用户KEY替换成真实的秘钥即可。
② 接口接入长链接时需要先编码再调用
③ 网址缩短需要带协议头,请加上链接的真实协议头(http或者https)
-
如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
2019-12-09 15:18:13目前国内最稳定最好用的是新浪T.cn短链接。 之前新浪提供了长链接转为短链接的API,可以把长链接转为t.cn/xxx这种格式的短链接。但是在前段时间新浪宣布关闭了之前几个流传在外的T.cn短链接的API接口。导致很多... -
短链接
2019-09-28 16:36:07短链接 ...原理:将长链接地址在一个支持短链接服务的网址进行转换,该网址会对该链接进行压缩,然后对压缩后的地址和源地址进行关联,然后访问短链接地址时,会在该网站进行查询,然后的到原网站地址... -
java短链接原理_微博短链接的生成算法(Java版本)
2021-03-01 10:28:07最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博...开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始... -
长URL链接转短链接算法
2019-04-27 17:29:37引言 最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只...开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反... -
短链接原理分析
2018-12-02 14:28:34通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在诸如微博,BBS等对帖子字数有限制的网站,通过使用短链接,用户可以把注意力... -
搭建短域/短链接跳转平台
2021-03-19 14:53:53通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在短信、社交分享时通过使用短链接,可以看起来整洁简短,而不是在担心链接超长... -
20191109 短链接技术
2019-11-09 18:25:52短链接(Short Link)顾名思义就是长度比较短的网址。...早期,短链接主要应用在网站的图片上传中,上传网站通过特定的算法缩短 URL(Uniform Resource Locator,统一资源定位符)链接地址,...短链接压缩算法。 分享的... -
微博短链接原理
2017-03-28 15:41:08通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在诸如微博,BBS等对帖子字数有限制的网站,通过使用短链接,用户可以把注意力... -
短链接的算法
2019-03-18 18:15:58短链接的优势:简短、美观、便于传播,比如说给一些用户push短信的时候,短链接就很有优势,短信一条70个字,短信内容超过70个字的时候就按两条计费了,这时候利用短链接,可以压缩短信内容,顺便也能短信... -
Java把长链接变成短链接_借助第三方,java长链接转短链接,IP域名同样支持
2021-03-17 14:31:22短信和微博中用到短链接,短链接的主要职责就是把原始链接很长的地址压缩成短链接地址,当点击这个链接后,又可以跳转到原始链接地址。package common.util;import java.util.ArrayList;import java.util.List;... -
长链接转短链接
2020-07-26 12:34:31大概讲一下长链接转短链接的原理:切记,不是压缩算法。而是重定向,当我们在长链接转成短链接时会有一个短链接指向长链接的一个映射,然后当我们请求一个短链接的时候,服务器会先根据映射关系从短链接找到长链接... -
短链接批量生成工具
2018-10-17 08:50:16短链接批量生成工具 支持支持批量处理 文案处理 ,支持文章内直接压缩替换,用途不多说了~ -
Mysql分表_短链接实现
2020-06-15 17:58:25其实短链接的实现并没有一个固定的算法,主要的原理就是把长链接通过一定的规则得到一个短链接,然后把长链接和短链接的关系记录在数据库中(你可以使用关系型数据库或者非关系型数据库NoSql)。当用户访问短链接时... -
URL长链接转短链接
2017-07-07 11:15:59最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只...开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始链 -
http之短链接原理分析
2018-12-05 13:52:43通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在诸如微博,BBS等对帖子字数有限制的网站,通过使用短链接,用户可以把注意力... -
长URL链接转短链接算法(JAVA)
2014-05-05 15:40:11短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。 开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法... -
短链接的生成算法
2013-10-31 11:31:00新浪微博短链接的生成算法(Java版本) ...短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。 开始以为短链接是按照某种算法... -
微博短连接压缩算法java版
2013-06-07 11:11:11最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发...开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成 -
短网址压缩系统 v0.1.zip
2019-07-07 07:12:40短网址服务可以帮助你把一个长网址缩短,方便你在社交网络和微博上分享链接。 支持长网址压缩 短网址还原 系统构架 php txtcached (文本缓存库) 支持千万级 数据 短网址生成形式根据十六进制递进增加 ... -
java 新浪短网址生成器_新浪短网址链接生成器 2020最新新浪t.cn短链接在线生成接口推荐...
2021-03-18 00:46:21很多朋友会发现在推广的过程中链接太长总是很不方便分享,转化率极低。这种情况下我们一般会使用短网址服务来压缩我们的推广链接。...3、将要缩短的URL粘贴到新浪短链接生成器后。把你的光标移动到缩... -
短链接设计剖析
2016-08-26 16:14:43短网址的名称网上叫的有很多种,网址缩短、网址压缩什么什么的,原理说白了就跟您带了一包东西去超市购物,进超市前把东西塞到超市的储物柜,然后拿到一个号码牌,您进超市就不用再背一大包东西了,只需要拿着一个...