Android新浪微博数据获取实例(一)(MVVM架构实现)
来源:互联网 发布:韩国直播软件 编辑:程序博客网 时间:2024/06/06 10:46
新浪微博数据获取实例(一)(MVVM架构实现)
任务描述
利用android MVVM架构模式搭建一个软件实现类似微博首页列表显示的功能,不能使用SDK,通过Oauth协议,调用微博的API。
功能实现:
1 OAuth授权方式获得第三方授权登录 这里有SDK集成方式和非SDK集成方式
2 新浪微博API调用
一、创建新浪微博移动应用
登陆:http://open.weibo.com/development/mobile
1 填写个人开发者信息
说明:这里的网站可以填写你的博客地址 后面可以修改。
2 身份认证
不进行身份认证也行,但是权限会有约束
3 创建应用
说明:
android下载地址:先填着你的博客地址
android签名:一定要确保手机上已安装将要提交审核并且已经加了数字签名的apk
再通过新浪微博提供了的可以用来获取Android签名的工具,安装到手机上输入包名就可以生成签名
二、获取签名
点击android-studio的run就是使用的是debug模式,debug模式下签名是为了开发调试,Android SDK提供了一个不需要密码的证书用于在debug模式下进行签名调试,默认存储在$HOME/.android/debug.keystore,但是release版本必须使用自己的数字签名证书,release模式下进行签名则是为了正式发布。
因此将软件run到手机上,再通过新浪微博提供了的可以用来获取Android签名的工具,安装到手机上输入包名就可以生成签名了,将签名写入新浪微博的应用中。
获取新浪微博的授权认证
微博开放接口的调用,如发微博、获取用户基本信息、获取热门微博内容等,都是需要获取用户身份认证的。目前微博开放平台用户身份鉴权主要采用的是OAuth2.0。
OAuth(Open Authorization)授权认证协议
OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。不会使第三方触及到用户的帐号信息(如用户名与密码),是安全的。
服务提供者可以通过OAuth提供接口
- 软件开发商也可以通过OAUTH去调用接口 如微博API调用中可以通过接口获得用户的关注信息,而不需要用户登录的账号密码信息
授权机制:
- SSO 授权:在有客户端的情况下,使用 SSO 授权登陆;无客户端的情况下,自动唤起 Web 授权
- Web 授权:在没有客户端的情况下,可直接使用该授权 虽然第一次要输入账号密码,但是也是通过微博的平台去输入,第三方软件是得不到的,所以仍是安全的
- SSO 授权+Web 授权 混合授权,(推荐使用) ( 如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权 )
填写授权回调页
通常Mobile Native App没有服务器回调地址,您可以在应用控制台授权回调页处填写平台提供的默认回调页,该页面用户不可见,会传回一个“code”参数,开发者可以用code换取Access Token值。 OAuth2.0客户端默认回调页:https://api.weibo.com/oauth2/default.html
引导用户授权
引导需要授权的用户到如下页面:
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
YOUR_CLIENT_ID:即应用的AppKey,可以在应用基本信息里查看到。
YOUR_REGISTERED_REDIRECT_URI:即之前填写的授权回调页,注意一定要完全相同。
如果用户授权成功后,会跳转到回调页,开发者此时可以得到url参数中的code值,注意code只能使用一次。
换取Access Token
开发者可以访问如下页面得到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
得到的返回是一个JSON格式的数据
可以用JSONFormat解析
我的Bean为
package com.scnu.sihao.sinaweibodemo;public class AccessTokenBean { private String access_token; private String remind_in; private int expires_in; private String uid; private String isRealName; public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public String getRemind_in() { return remind_in; } public void setRemind_in(String remind_in) { this.remind_in = remind_in; } public int getExpires_in() { return expires_in; } public void setExpires_in(int expires_in) { this.expires_in = expires_in; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getIsRealName() { return isRealName; } public void setIsRealName(String isRealName) { this.isRealName = isRealName; }}
若出现这个错误
{"error":"HTTP METHOD is not suported for this request!","error_code":10021,"request":"/oauth2/access_token"}
问题原因是:请求方式不对,应该是通过post方式请求,上面这样属于get方式
错误代码参考下面的附录
接着就可以调用API啦~
1 获取当前登录用户及其所关注(授权)用户的最新微博
https://api.weibo.com/2/statuses/home_timeline.json?access_token=你得到的access_token
请求方式为GET
相关请求参数见官方API:http://open.weibo.com/wiki/2/statuses/home_timeline
并且可以多次利用该网址调用 access_token有效期为:
利用微博SDK进行Oauth授权获得AccessToken
参考另一篇博客:http://blog.csdn.net/weixin_37577039/article/details/78632075
新浪微博审核
若未通过审核,只能允许当前申请APPKEY 用户的用户授权,其他用户不能正确授权,获得用户信息,因为新浪微博不允许未授权的应用获取其他用户授权
会出现错误码 21321
报错:
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/home_timeline.json"}
界面UI参考另一篇博客:http://blog.csdn.net/weixin_37577039/article/details/78581423
利用Retrofit2+Okhttp+rxjava调用api参考另一边博客:
http://blog.csdn.net/weixin_37577039/article/details/78556296
解析新浪微博JSON数据:
http://blog.csdn.net/weixin_37577039/article/details/78619940
附录
错误代码参考:http://open.weibo.com/wiki/Error_code
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/home_timeline.json"}
是因为 在测试期 也就是 没有 提交审核前 ,新浪验证比较严格 只允许 当前申请APPKEY 用户 测试, 其他用户登录测试都会报这个错误.
还有一个官网没给的错误码
"error":"invalid_grant","error_code":21325
这个原因是CODE过期了!因为code只能使用一次,一次就过期了
结合MVVM架构进行数据呈现见博客:
- Android新浪微博数据获取实例(一)(MVVM架构实现)
- Android MVVM架构模式(一)
- Android架构学习MVC、MVP、MVVM(一)
- Android MVVM架构模式 详解和综合运用(一)
- silverlight开发实例(Prism+MVVM+RIA)(一)--开发架构
- Android MVVM(一) 介绍
- Android笔记(28)MVVM架构过程
- [Android] PorterDuff使用实例----实现新浪微博图片下载效果
- [Android] PorterDuff使用实例----实现新浪微博图片下载效果
- [Android] PorterDuff使用实例----实现新浪微博图片下载效果
- WPF与MVVM的实现(一)MVVM简介
- 新浪微博技术架构分析(一)
- Android实现JSON对象获取登录新浪微博
- JAVA实现新浪微博API接口玩转新浪微博(一)
- 新浪微博开发一(引导页面的实现)
- Android MVVM架构模式(二)——DataBinding框架(一)
- 新浪微博平台架构(转)
- [Android学UI之三]实现新浪微博消息页面左右滑动页面方式一(一)
- 【OpenCV入门教程之十六】OpenCV角点检测之Harris角点检测
- 组合数取模
- linux下解压命令大全
- 分布式系统的常见问题
- 树莓派3下使用QT5配置ffmpeg环境并调用硬件编解码器
- Android新浪微博数据获取实例(一)(MVVM架构实现)
- mysql技术内幕
- 通过cloud9+gost实现3M的代理速度
- 学习python 之 json模块
- Java jmx远程调优
- jenkins部署远程服务器(jenkins+svn+maven)
- 分布式事务一致性之两阶段提交
- python + pyqt +opencv
- 可恶的 selinux