短链(短地址、Short URL)

短链接产生和流行得益于社交网络的发展。短链接可以更方便的在网络中传播,避免超出字符限制,使得分享地址更加容易并且能够统计此地址的访问信息。

下面是新浪微博API对短链接口的描述:%E6%96%87%E6%A1%A3_V2#.E7.9F.AD.E9.93.BE

我们最关心的是将一个长链接转化成短链接,其他内容暂不关心。

打开长了,美国服务器,链转短链的内容。

上面有URL,调用方式是GET方法,请求参数有三个:source、access_token、url_long,结合三个参数的说明,采用OAuth授权的方式,source不需要填写,否则source是应用的AppKey;采用OAuth授权的方式,access_token必填,内容通过OAuth授权后获得,否则不需要填写。url_long是需要转化的长链,必填。结合上面的内容,请求这个接口的典型格式有以下两种,分别是OAuth授权方式和非OAuth授权方式:

https://api.weibo.com/2/short_url/shorten.json?source=AppKey&url_long=NeedConvertURL

https://api.weibo.com/2/short_url/shorten.json?access_token=OAuthContent&url_long=NeedConvertURL

OAuth授权方式的研究自己看文档吧%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E

非授权方式只需要一个AppKey和被转换的长链就可以了。Google以下可以获取一大堆的AppKey,如果你没有自己的应用也不想创建的话,而且这些AppKey有一个好处是用户量非常大,对接口的访问频次限制较小,相当于没有限制。

iphone新浪微博客户端 App Key:5786724301

iPad新浪客户端App Key:2849184197

Google.Nexus浪客户端App Key:1206405345

周博通微博管家App Key:202088835

Weico App Key:211160679

有了AppKey,美国服务器,下面测试以下获取短链接吧:

https://api.weibo.com/2/short_url/shorten.json?source=5786724301&url_long=http://www.baidu.com

https://api.weibo.com/2/short_url/shorten.json?source=5786724301&url_long=http://www.baidu.com&url_long=http://www.sina.com.cn

结果:

{“urls”:[{“result”:true,”url_short”:”http://t.cn/h5mwx”,”url_long”:”http://www.baidu.com”,”type”:25}]}

{“urls”:[

{“result”:true,”url_short”:”http://t.cn/h5mwx”,”url_long”:”http://www.baidu.com”,”type”:25},

{“result”:true,”url_short”:”http://t.cn/h5myh”,”url_long”:”http://www.sina.com.cn”,”type”:25}

]}

返回结果中的url_short就是我们想要的内容。

下面介绍短链接服务是如何实现的。

所以短链接的原理很简单:通过一个“方法”得到长链对应的一个字符串,与拥有的短域名拼接成一个地址,访问这个地址的时候解析出原来的长链,然后跳转。

提供短链接首先必须要有一个足够短的域名。显而易见,将转化成的意义并不大。可以看到新浪短链接所使用的域名是t.cn,虚拟主机,这个真的是足够短了(网易提供的短链接服务的域名是126.am),所以如果你想为别人提供短链接服务,你首先要申请到一个足够短的域名。

接着就是通过一些“方法”将传入的长链转换成一个类似于h5mwx这样的结果,然后当访问的时候找到h5mwx对应的长链,之后跳转。

目前网上查到的短链接多数都是按下面这篇文章的方式实现的。

1 package com.bjdata.test; java.security.MessageDigest; 4 import java.util.Random; ShortUrlTest { main(String[] args) {System.out.println(“长链接:”+sLongUrl);11String[] aResult = shortUrl(sLongUrl);//将产生4组6位字符串(int i = 0; i < aResult.length; i++) {14System.out.println(“[” + i + “]:” + aResult[i]);15 }16Random random=new Random();System.out.println(“短链接:”+aResult[j]); } String[] shortUrl(String url) {String key = “test”;String[] chars = new String[] { “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”,26″i”, “j”, “k”, “l”, “m”, “n”, “o”, “p”, “q”, “r”, “s”, “t”,27″u”, “v”, “w”, “x”, “y”, “z”, “0”, “1”, “2”, “3”, “4”, “5”,28″6″, “7”, “8”, “9”, “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”,29″I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”, “S”, “T”,30″U”, “V”, “W”, “X”, “Y”, “Z”31 32 };String hex = md5ByHex(key + url);35 36String[] resUrl = new String[4];37for (int i = 0; i < 4; i++) {String sTempSubString = hex.substring(i * 8, i * 8 + 8);lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);44String outChars = “”;45for (int j = 0; j < 6; j++) {index = 0x0000003D & lHexLong;outChars += chars[(int) index];lHexLong = lHexLong >> 5;52 }resUrl[i] = outChars;55 }56return resUrl;57 }* MD5加密(32位大写) src String md5ByHex(String src) {64try {65MessageDigest md = MessageDigest.getInstance(“MD5”);66byte[] b = src.getBytes();67 md.reset();68 md.update(b);69byte[] hash = md.digest();70String hs = “”;71String stmp = “”;72for (int i = 0; i < hash.length; i++) {73stmp = Integer.toHexString(hash[i] & 0xFF);74if (stmp.length() == 1)75hs = hs + “0” + stmp;76else {77hs = hs + stmp;78 }79 }80return hs.toUpperCase();81} catch (Exception e) {82return “”;83 }84 }85 86 }你是自由的,不仅是身体上的自由,

短链(短地址、Short URL)

相关文章:

你感兴趣的文章:

标签云: