t.cn的短网址想必都不陌生,最初主要是做微博短链接.不会因为微博中有网址链接而占去太多的字数限制.
这些都不多提了,说说相关API接口的使用吧.
第一种方法,使用官方提供的接口 .这不是本篇的重点,只是随笔提下.因为该方法的使用,是会受到各种限制的.
官方给出的接口地址详见文档页面:
http://open.weibo.com/wiki/2/short_url/shorten
里面提供了带有access_token 和 带有请求频次限制的接口使用说明及文档.
这个方法就不多些多说了,程序员都能够看得懂。
如果不是程序员我也没什么办法能够短时间内讲解到让你能看懂。
下面进入正题,说说不受限制的使用接口。
这可能也许是人们口中常说的滥用,但是在某些网站项目中,比如说如果客户非要要求动态页面的每个id参数不同的页面都输出和生成短网址显示,那可能就不得不使用到它,毕竟官方给出的是有频次限制受限。
第二种方法,获取不受限制接口。
首先我们百度【t.cn短网址】,随便上网找找,发现排在前面的有个站点 http://sina.lt/
打开进去看,这个是新浪短网址的站点。是不是官方的站点暂且也不去论也不去思考,主要是看其功能,看其是否实现了站点t.cn短网址的生成功能。点了进入短网址,又跳到另外一个站点http://dwz.wailian.work/ ,在这个站点上我们找到了下面这个页面。
如下图,直接对图片按钮审查元素,以及对 单选按钮 t.cn 进行审查元素,得到下图中三个关键点信息。
1.得到按钮信息,是图片按钮,里面没啥内容。也没有onclick代码。
2.表单form 提交之后,会执行short方法,带有两个参数值过去。一个是输入框输入的url,另外一个是当前选中的单选框的shortsite.val。之后查看源代码进行搜索short函数,没有内容,即没有javascript的short方法,查看头部,只有引入的jquery文件和JS文件。
3. t.cn的value 是sina ,这个后面会用到。
此时得到了部分信息之后,可以页面直接右键,点击查看源代码了。
源代码的head 代码块里面,引入了4个JS文件,第1第2,都是jquery框架,只看名字第三个差不多就是我们想要的了。第4个看名字应该是提供base64编码用的方法。
直接点击第三个,打开。ctrl+F ,搜索,直入主题搜索short,
得到了我们想要的内容,那么就是这个JS了,这里看着代码排版还行,可辨识度也很高。直接看就可以了,如果代码辨识度不高,可以通篇复制到notepad++里面进行排版。如下图:(选择语言,J->javascript)
因代码太直观,太好找了,直接就找到有这么一行:
var request = "api.php?from=w&url="+ base64encode(utf16to8(url))+"&site="+site;
然后下面的$.ajax是jquery 的异步请求,也是请求的这个地址。
分析链接,这里有俩个函数 base64encode(utf16to8(url)) ,
其中base64encode 不用多说就是进行base64编码了,这也是head里面引用base64.js的用处,是需要用里面的这个方法。
另外一个函数,utf16to8(url),看名字猜测是把UTF-16编码转换为UTF-8编码,传入的是URL链接长网址。这个我们直接就不需要去管他了。通常我们都是使用的utf-8比较多。直接随便找个网址测试接口。
http://www.baidu.com 等于 base 64 的 aHR0cDovL3d3dy5iYWlkdS5jb20=
因为这里的接口的api.php是相对路径,根据站点进行拼接,实际接口就是:
http://dwz.wailian.work/api.php?from=w&url=aHR0cDovL3d3dy5iYWlkdS5jb20=&site=sina
去除无意义的非关键参数from=w ,得到简约接口地址:
http://dwz.wailian.work/api.php?url=aHR0cDovL3d3dy5iYWlkdS5jb20=&site=sina
浏览器直接进行get访问打开,得到页面:
可以看到,返回的是JSON 格式的信息,里面已经有我们的t.cn短网址,这个信息段正是我们想要的。
剩下可以做的事情已经很少很少了,就是反序列化JSON ,去除转义字符。就搞定。
http://dwz.wailian.work/api.php?url=aHR0cDovL3d3dy5iYWlkdS5jb20=&site=sina
接口地址:http://dwz.wailian.work/api.php?url=base64URL=&site=sina
接口参数:
url:经过base64加密后的长链接字符串
site:短网址类型,默认如果不传递就是sinalt (因JS代码里面有句代码如下),t.cn的是sina ,其它值就是去页面上去找radio单选框的value即可。
//JS里面定义了默认不传递site时生成的是sinalt类型。
if (site == '' || site == undefined) {
site = 'sinalt';
}
文章就写到这里吧 ,实现代码就挺简单的,一个get请求,一个JSON反序列化,字符串处理掉转义字符,代码我就不发了,我也只写了两种语言版本的代码。
ps: 如果你尝试打开
http://dwz.wailian.work/api.php?url=aHR0cDovL3d3dy5iYWlkdS5jb20=&site=sina
返回JSON结果为error,并且提示:
\u60a8\u7684\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41
\u8bf7\u7a0d\u540e\u518d\u8bd5!
实际上unicode编码转汉字以后是:您的请求过于频繁 请稍后再试!
这个是多次尝试对同一个链接进行生成时会发生的。只需要换一个新的链接进行生成就可以了。
不要在短时间内过多次尝试进行同一个链接的生成,返回error失败的次数过多时,JSON接口就会返回captcha了。
{"result":"captcha","data":{"success":1,"gt":"0e3c487c91ce47741cc2b9597f5f9c70","challenge":"58664c7fb1825e21ab912b89a244afa4"}}
captcha是因重复链接的请求过多而到来,会出现验证码,这种情况想必一般人都不太喜欢吧。