新浪微博的API官方提供了很多种调用方式,支持编程的,归根结底就是两种:

1.基于Oauth协议,使用Open API。(http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)

2.使用Weibo JS-SDK(http://open.weibo.com/sdk/js )。

官方的方式总是显得很麻烦。我们来探讨一下,能不能通过非官方的方法,免AppKey、免认证、Ajax跨域调用新浪微博API呢?

Web 2.0时代,短链服务非常流行。新浪的短链服务域名是t.cn,这个域名实在是非常短,没办法更短了。

打开新浪微博API的官方文档,关于短链服务是这样的描述的:

以上列举的方法调用都大同小异。我们再以第一个方法short_url/shorten为例。打开详细说明:http://open.weibo.com/wiki/2/short_url/shorten

我们来分析一下这一段说明:

1.是否需要登录:否。这很关键,既然不需要登录,我们的“免认证”就好发挥了。

2.频次限制:是。这也很关键,这意味着如果我们按照官方的方式,调用次数将非常受限。

3.支持格式:JSON。其实根据实验,新浪微博不仅支持JSON,还支持JSONP,只是文档没告诉我们罢了。这也很关键。因为有了JSONP,就意味着可以方便的跨域了。

4.URL:https://api.weibo.com/2/short_url/shorten.json 。其实这也是骗人的。HTTPS必定会影响速度。经过实验,直接把HTTPS改为HTTP,仍然是OK的。

接下来逐个攻破难点。

一,使用JQuery+JSONP跨域。

参考文档:http://baike.baidu.com/view/2131174.htm

Jquery对JSONP非常友好,只需要在AJAX调用时指明dataType : jsonp就可以了。

二,频次限制问题。

既然不需要登录,频次限制问题就可以绕过。因为AppKey本身是半公开的。我们可以很轻松地Google到一大堆牛逼应用的Appkey。

例如 :

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

iPad新浪客户端App Key:2849184197

Google.Nexus浪客户端App Key:1206405345

周博通微博管家App Key:202088835

Weico App Key:211160679

以上列举的这些AppKey,都是来自于一些用户量非常多的手机应用,它们的频次限制非常宽松的,几乎可以理解为“不限制”。为了解决频次限制问题,我们用它们的Appkey就可以了。

另外:新浪微博API的频次限制是有两个维度的,服务IP维度和用户IP维度。http://open.weibo.com/wiki/Rate-limiting 。这一点与本文无关,因为Javascript在客户端运行。但如果您想对本文提到的方法进行改装,使用C#或其他高级语言在服务器端进行调用的话,就要注意服务器IP维度了。

 三、简单的实验一下。

您现在可以直接在浏览器中访问这个地址:

http://api.weibo.com/2/short_url/shorten.json?source=2849184197&url_long=http://www.cnblogs.com

浏览器中将显示

{"urls":[
{"result":true,"url_short":"http://t.cn/h5FGy","url_long":"http://www.cnblogs.com","type":0}]}
通过访问上述的地址,您已经得到了http://www.cnblogs.com的段地址:http://t.cn/h5FGy
注意我们使用的是http而非https,不需要使用https,上文已经提到了。
 
四、最终代码示例
最终代码的示例参考这里http://haotaoqu.com/item-45.html
这个示例将一个又臭又长的淘宝客URL地址转换为了新浪短地址。
Javascript代码如下:
<script type="text/javascript"> $(document).ready(function(){ var j=$("#urlText"); var i=$("#goumai"); $.ajax({ 

//使用iPad新浪微博客户端的Appkey url: 'http://api.weibo.com/2/short_url/shorten.json?source=2849184197&url_long='+i[0].href,   type: "GET", dataType: "jsonp", //使用JSONP方法进行AJAX cache: false, success: function (data) { j.val ( data.data.urls[0].url_short); //处理返回数据,显示到网页上  }); }}); }); </script>



五、除short_url/shorten外,其他可以用此方法调用的API

凡是标记为“是否需要登录:否”的接口都可以通过本文的流氓方法进行调用。打开http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2 官方文档慢慢选吧~

以短链服务为例,探讨免AppKey、免认证、Ajax跨域调用新浪微博API相关推荐

  1. 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案

    问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...

  2. 【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)

    一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例) JSONP(JSON with Padding)可以看成是JSON的一种"使用模式",用以解决" ...

  3. JAVA商城项目(微服务框架)——第7天nginx+cors解决跨域+品牌+分类查询

    0.学习目标 使用资料搭建后台系统 会使用nginx进行反向代理 实现商品分类查询功能 掌握cors解决跨域 实现品牌查询功能 1.搭建后台管理前端 1.1.导入已有资源 后台项目相对复杂,我们不再从 ...

  4. linux c调用wcf服务,Silverlight+WCF实现跨域调用

    在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...

  5. 服务端配置实现AJAX跨域请求

    2019独角兽企业重金招聘Python工程师标准>>> 一直以为AJAX跨域是无法逾越的鸿沟,最近发现原来在服务端可以通过发送header信息来允许AJAX跨域请求. PHP代码示例 ...

  6. jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)

    jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...

  7. java 服务端解决ajax跨域问题

    java 服务端解决ajax跨域问题 参考文章: (1)java 服务端解决ajax跨域问题 (2)https://www.cnblogs.com/fx2008/p/4024971.html (3)h ...

  8. ajax跨域请求wcf服务,jQuery ajax跨域发布到WCF休息服务

    我试图做一个跨域POST到WCF休息服务.以下是我的服务代码,获取请求jQuery ajax跨域发布到WCF休息服务 [WebInvoke(UriTemplate = "", Me ...

  9. java 服务端 处理跨域_javaweb服务端跨域支持

    项目开发为了支持web浏览器ajax的直接请求,涉及到了跨域的需求,通过学习对跨域有了更深入的认识,现在总结一下: 1.跨域说明 跨域指请求和服务的域不一致,浏览器和H5的ajax请求有影响,而对服务 ...

最新文章

  1. 150亿参数大杀器!Facebook开源机器翻译新模型,同传人员或失业
  2. 将 iPhone 定位设置在法国,手机速度就能迅速提升?
  3. Cell子刊:大鱼大肉吃三天,体重未动大脑先变,不仅发胖还会发炎
  4. 别做菜鸟!莫让摄像头参数迷惑头脑
  5. 使用FFmpeg进行视频抽取音频,之后进行语音识别转为文字
  6. JQuery--事件
  7. SharePoint 2010 WSP包部署过程中究竟发生什么?
  8. java继承的终极奥义_java学习笔记12-继承
  9. Spark解决的问题与体系结构
  10. windows7和windows10下安装xgboost
  11. 东南亚跨境电商shopee平台,教你轻松打造高销量品牌店铺!
  12. ps2改usb接口_如何将PS2接口键盘、鼠标改成USB接口
  13. 产品碳足迹ISO14067认证
  14. hbuilderx 数据库_HBuilderX入门教程
  15. PMOS与NMOS的区别
  16. android 从矢量图SVG获取位图bitmap
  17. SEI、Envestnet、AssetMark2019年度观察 ——美国TAMP行业代表性公司对比分析
  18. printk 使用方法
  19. 在Qt中使用回调函数替代信号槽
  20. error MSB3073: 命令“setlocal

热门文章

  1. a标签,br标签,p标签详解
  2. js监听浏览器焦点事件
  3. D3.js中Bullet Charts详解
  4. HTML5 入门:一个最简单的HTML页面(doctype、meta、Head、标签的使用)
  5. Java 的File类,以及常用方法
  6. 设计模式6原则1法则
  7. java enctype_java里的enctype表单传输取值方法后端该怎么取值 取值类型为string类型...
  8. 【动力节点】springmvc框架入门教程-从入门到精通
  9. Java开发教程!三面蚂蚁金服(交叉面)定级阿里P6
  10. qrcode使用生成二维码