新浪微博接口调用

最近写一个App需要调用新浪微博的接口,遂查阅新浪开放平台相关接口,顺便写下此文记录新浪微博接口调用过程。

进入开放平台->文档->微博API,看到一大堆诸如一下的API:

statuses/public_timeline 获取最新的公共微博

statuses/friends_timeline 获取当前登录用户及其所关注用户的最新微博

statuses/home_timeline 获取当前登录用户及其所关注用户的最新微博

statuses/friends_timeline/ids 获取当前登录用户及其所关注用户的最新微博的ID

statuses/user_timeline 获取用户发布的微博

statuses/user_timeline/ids 获取用户发布的微博的ID

...

选择其中一个

statuses/user_timeline

获取某个用户最新发表的微博列表

进入查看:

获取某个用户最新发表的微博列表

URL

https://api.weibo.com/2/statuses/user_timeline.json支持格式

JSON

HTTP请求方式

GET

是否需要登录


关于登录授权,参见 如何登录授权

访问授权限制

访问级别:普通接口
频次限制:
关于频次限制,参见 接口访问权限说明


原来需要登录授权,进入“如何登录授权”,发现有多种应用场景:网站或者站外Web应用、桌面和无线客户端应用、微博站内应用,我们测试用web应用,遂查看web应用的验证授权,马上注册了一个新浪微博账号,创建了一个web应用,得到一个client_id和密码,方便测试。

Web应用的验证授权

基本流程


1. 引导需要授权的用户到如下地址

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI


2. 如果用户同意授权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE


3. 换取Access Token

https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

(其中client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET可以使用basic方式加入header中)


返回值

{ "access_token":"SlAV32hkKG", "remind_in ":3600, "expires_in":3600 }


4. 使用获得的OAuth2.0 Access Token调用API

把步骤1中网址放入到我的网站,

<a href="https://api.weibo.com/oauth2/authorize?client_id=32******84&response_type=code&redirect_uri=http://www.****.com/weibo/callback">测试</a>

其中,redirect_uri是我的网站,供新浪微博回调。

访问,弹出授权页面


输入刚才注册的账号密码授权登陆后,新浪果然重定向到了http://www.****.com/weibo/callback?code=2070acab3f453f1af944d96f3c948e74

带回了一个code,经多次测试,发现code的值每次都不一样。

利用这个code,我们在后台访问步骤3的地址,用basic认证方式访问,其他都不行。

PrintWriter out = null;
   BufferedReader in = null;
   String result = "";
   try {
   URL realUrl = new URL(url);
   // 打开和URL之间的连接
   HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection();
   // 设置通用的请求属性
   conn.setRequestProperty("accept", "*/*");
   conn.setRequestProperty("connection", "Keep-Alive");
   conn.setRequestProperty("user-agent",
   "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  
   String client_id = "3293246784";
String client_secret = "46f4d15897fdc47e5161e5c0ebae48b0";
String scre = client_id+":"+client_secret;
conn.setRequestProperty("Authorization", "Basic "+base64Encode(scre));
  
   // 发送POST请求必须设置如下两行
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setRequestMethod("POST");
   // 获取URLConnection对象对应的输出流
   out = new PrintWriter(conn.getOutputStream());
   // 发送请求参数
   out.print(param);
   // flush输出流的缓冲
   out.flush();
   // 定义BufferedReader输入流来读取URL的响应
   in = new BufferedReader(
   new InputStreamReader(conn.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
   result += line;
   }
   } catch (Exception e) {
   System.out.println("发送 POST 请求出现异常!"+e);
   e.printStackTrace();
   }
   //使用finally块来关闭输出流、输入流
   finally{
   try{
   if(out!=null){
   out.close();
   }
   if(in!=null){
   in.close();
   }
   }
   catch(IOException ex){
   ex.printStackTrace();
   }
   }
   return result;

经测试

result:

{"access_token":"2.00YDi_sFcvHsaDefb264413462vdvD",
"remind_in":"157***999",
"expires_in":157679999,
"uid":"53******92"}

成功返回token.

利用该token,我们进入步骤4: 使用获得的OAuth2.0 Access Token调用API

用http get方法String accessUrl = "https://api.weibo.com/2/statuses/user_timeline.json?access_token="+token+"&uid="+uid;

成功获取指定用户的微博,但是只能获取当前用户的微博,即uid只能是当前用户的uid,获取其他用户的微博已经被封。

查看其它API,有一个API可以获取批量用户的微博,但是需要申请高级授权,据说大流量的应用才会审批通过。

再一次对新浪微博失望。


上一篇: 没有了
下一篇: JMeter负载测试入门教程 – 终极指南
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 

一号门极客CMS,由Python,Django,MySQL,Apache,Mod Wsgi 强力驱动.
鄂ICP备14001754号-3