震惊了:调用渣浪短网址服务(旧)生成短网址,小心掉坑

2023-10-30 05:30

本文主要是介绍震惊了:调用渣浪短网址服务(旧)生成短网址,小心掉坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

24142757_PxQ0.png 本文通过 OscPress 同步至oschina,获取最新版本和更好的阅读体验请查看原文:
http://blog.cellmean.com/?p=1289

众所周知,新浪微博有一个短网址功能,会把你在微博发的原链接转成http://t.cn/XXOO的形式。开放了API,也就是这个:

http://open.weibo.com/wiki/2/short_url/shorten ,调用这玩意还居然要access_token ,我也是醉了,搜索了一下,找到一个旧版的接口,不需要access_token, 只要申请或者随便找一个appkey就能用了, 详细说明看这篇https://www.douban.com/note/249723561/ ,

对应的URL请求地址为:xml:http://api.t.sina.com.cn/short_url/shorten.xml
json:http://api.t.sina.com.cn/short_url/shorten.json请求方式:GET
请求参数:source:应用的appkeyurl_long:需要转换的长链接
举个例子:
xml:http://api.t.sina.com.cn/short_url/shorten.xml?source=3271760578&url_long=http://www.douban.com/note/249723561/
返回内容为:
<urls>
<url>
<url_short>http://t.cn/zWXySpZ</url_short>
<url_long>http://www.douban.com/note/249723561/</url_long>
<type>0</type>
</url>
</urls>json:http://api.t.sina.com.cn/short_url/shorten.json?source=3271760578&url_long=http://www.douban.com/note/249723561/
返回内容为:
[{"url_short":"http://t.cn/zWXySpZ","url_long":http://www.douban.com/note/249723561/","type":0}]

测试了一下,服务仍然可用,但这个接口是有问题的,貌似是旧版api遗留下来的, 首先这个请求参数url_long的地址不必使用url_encode, 新版是需要的(而且也是必要的),经测试发现被 url_encode过的long_url只会返回”[]”,这导致当请求原链接带”&”时就不能正确识别,比如http://blog.cellmean.com?post_type=post&id=10086, 则发送:

“http://api.t.sina.com.cn/short_url/shorten.json?source=3271760578&url_long=http://blog.cellmean.com?post_type=post&id=10086”;

返回:

[
{
“url_short”: “http://t.cn/RiZMd85”,
“url_long”: “http://blog.cellmean.com?post_type=post”,
“type”: 0
}
]

这样”&id=10086″的部分会被吃掉,实际上返回的是”http://blog.cellmean.com?post_type=post”的短链接。如果要得到正确的结果,只能对”&”单独进行一次urlencode,替换成”%26″,或者转换成html实体”&amp;”;
即请求:

“http://api.t.sina.com.cn/short_url/shorten.json?source=3271760578&url_long=http://blog.cellmean.com?post_type=post%26id=10086”

返回值:

[{“url_short”:”http://t.cn/RiZqrtU”,”url_long”:”http://blog.cellmean.com?post_type=post&id=10086″,”type”:0}]

 

然后我简单封装了一下, 代码如下:

function sina_url_shorten( $url,$source='3271760578' ) {echo $request_url = "http://api.t.sina.com.cn/short_url/shorten.json?source=".$source .'&url_long='. str_replace("&","%26",$url);$data = file_get_contents($request_url);$array = json_decode($data,true);if( isset($array[0] )) {return $array[0]['url_short'];}else{return false;}}$long_url = 'http://blog.cellmean.com/book/%E5%8F%B2%E8%AE%B0/?cid=5689142fa8c4a4100065298&from=10086';
echo sina_url_shorten($long_url);

没有弄http的错误处理,密钥是网上找到的,可能会有调用频率限制,可以在这个页面申请一个 : http://open.weibo.com/connect 然而这个立即连接半天点不动。

最后说明:标题灵感源于“UC震惊部”:)


感谢阅读本文,欢迎访问 异想录 获取更多内容或 查看原文

转载于:https://my.oschina.net/falcon10086/blog/845526

这篇关于震惊了:调用渣浪短网址服务(旧)生成短网址,小心掉坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305879

相关文章

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

C# FTP调用的实现示例

《C#FTP调用的实现示例》本文介绍了.NET平台实现FTP/SFTP操作的多种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 .NET 自带 FtpWebRequest 实现 FTP 操作1.1 文件上传1.2

C#自动化生成PowerPoint(PPT)演示文稿

《C#自动化生成PowerPoint(PPT)演示文稿》在当今快节奏的商业环境中,演示文稿是信息传递和沟通的关键工具,下面我们就深入探讨如何利用C#和Spire.Presentationfor.NET... 目录环境准备与Spire.Presentation安装核心操作:添加与编辑幻灯片元素添加幻灯片文本操