使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)
优采云 发布时间: 2021-12-21 02:11使用新浪微博开放平台api同步微博内容至自己网站(新浪微博开放平台做个实践,开发一个功能简单的android客户端)
介绍
最近不太忙,花了点时间学习Android应用开发。经过两周的学习,我在学习的同时也写了很多demo例子。您可以播放来自基本控件和基本*敏*感*词*效果的大量演示,并继续更新和下载。
从本周开始,我打算以新浪微博开放平台为实践,开发一个简单的Android客户端,尽可能完善功能。
今天的内容
上图是这个客户端的主界面。目前只拿到了前20条数据。您也可以单击刷新来刷新数据。功能比较简单。
运行系统为android2.2.
用到的技术点包括ListView、自定义ListAdapter、多线程相关的Message、Handler、认证相关的OAuth、用户图片的异步加载。
新浪微博的验证使用了signpost的OAuth组件,没有使用微博的SDK。
来源下载:新浪微博2
下载源代码后,将后缀改为rar,使用压缩软件解压即可。
关于 OAuth 身份验证
OAuth 是一种流行的授权方案。twitter、facebook、google等大型开放平台均支持oauth认证方式。新浪微博、腾讯微博、163微博等国内开放平台也已支持。这种验证方式。
引用维基百科的相关说明
“Oauth 是一种开放标准,允许用户允许第三方应用访问用户在某个网站上的私有资源,而无需将用户名和密码传递给第三方应用。oauth 允许用户提供一个令牌,而不是用户名和密码来访问它们存储在特定服务提供商中的数据。”
例如:
用户A在服务提供者B上存储了一些资源,B支持oauth授权方式。A 是 B 上的注册用户,拥有用户名和密码。您可以通过使用用户名和密码登录 B 来查看您的资源。假设有一个应用C,用户A在使用C时需要将资源存储在B上,实现C在B上展示资源有两种方式。
这时候C可以使用B开启的oauth授权机制,当用户A想要展示B上的资源时,C会跳转到B的认证页面,用户在B的页面输入用户名和密码。通过后,会询问用户是否为C应用开发相关资源。用户可以自定义C可以访问的资源,然后跳转回C应用。这样就不用担心用户名和密码,也不会因为同时存储多个资源而导致维护问题。
你可以通过下面的网站了解更多关于oauth的具体技术细节。
从上图我们可以看出,实际的流程分为消费者和提供者两部分。Consumer是例子中的c应用,provider是例子中的B服务提供者。
使用OAuth进行认证授权的过程如下:
用户访问客户端的网站,想要操作服务提供者中存储的用户资源。客户端向服务提供者请求一个临时令牌。在服务提供者验证客户端的身份后,它会授予一个临时令牌。客户端获取临时令牌后,将用户引导至服务提供商的授权页面,请求用户授权。在这个过程中,临时令牌和客户端的回调连接被发送给服务提供者。用户在服务提供者的网页上输入用户名和密码,然后授权客户端访问所请求的资源。授权成功后,服务提供者将用户引导回客户端的网页。客户端根据临时令牌从服务提供者处获取访问令牌。服务提供者根据临时令牌和用户的授权向客户端授予访问令牌。客户端使用获取的访问令牌访问存储在服务提供者上的受保护资源。新浪微博上的Oauth
借用新浪微博上的oauth验证流程图。
当我们在新浪微博开放平台上创建一个新的应用程序时,我们会给新的应用程序分配一个key和secret,即consumerKey和consumerSecret。通过这两件事,我们去到request_token,然后将用户重定向到新浪微博平台的授权页面。授权后,我们将根据 callback_url 重定向到我们应用程序的地址。我们再次使用request_token获取access_token,后面需要传递。访问令牌访问开放平台提供的需要验证的接口。
当然,那些不需要验证就可以访问的接口,直接使用key就可以访问了。具体请参考开放平台提供的API文档。
腾讯微博和163微博的开放平台在原理和实现上是相似的。
包com. 新浪微博2;导入 oauth。路标。OAuth消费者;导入 oauth。路标。OAuthProvider;导入 oauth。路标。公地http。CommonsHttpOAuthConsumer; 导入 oauth。路标。公地http。CommonsHttpOAuthProvider; 导入 oauth。路标。例外。OAuth通信异常;导入 oauth。路标。例外。OAuthExpectationFailedException; 导入 oauth。路标。例外。OAuthMessageSignerException; 导入 oauth。路标。例外。OAuthNotAuthorizedException; 公共类 OAuth {私有 OAuthConsumer mConsumer; 私有 OAuthProvider mProvider;public static final String CALLBACK_URL = "sinaweibo2://WeiboListActivity"; 公共静态最终字符串CONSUMER_KEY =“1849239616”;公共静态最终字符串 CONSUMER_SECRET = "b2137bf782d5a8394"
吨。新浪。com。cn/oauth/request_token"; public static final String ACCESS_TOKEN_URL = ". 吨。新浪。com。cn/oauth/access_token"; public static final String AUTHORIZE_URL = ". 吨。新浪。com。cn/oauth/authorize"; public OAuth() {} public String RetrieveAuthUrl() 抛出 OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mConsumer = new CommonsHttpOAuthConsumer(CONSUTOMER_KEY, CONSUMER_SECRET_URL, SUMERZEUMERESUERESUERUrl 提供者字符串); = mProvider。
检索请求令牌(mConsumer,CALLBACK_URL);return authUrl;} public void RetrieveAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {mProvider. setOAuth10a(true); 供应商。检索访问令牌(mConsumer,验证器);OAuth 用户。USER_ID=mProvider。获取响应参数()。getFirst("user_id"); OAuth 用户。ACCESS_TOKEN = mConsumer。获取令牌();OAuth 用户。ACCESS_TOKEN_SECRET = mConsumer。getTokenSecret();}}
更*敏*感*词*
接下来主要有两个功能需要改进,一个是分页浏览,一个是发布微博。
未来可能会支持图片发布等实用功能。
有UI美化和性能优化。
总结
学习过程中看了两本书,Pro.Android.2.pdf和Professional.Android.2.Application.Development.(Wrox,.2010,.0470565527).pdf,都是很不错的入门书籍,我没有全部看完,看了大部分之后,会一边看一边写demo。
同时,我每天都会在论坛,eoe的开发者门户。回答问题、解决问题、提问、发帖,简而言之就是锻炼自己,强迫自己锻炼基础和思维。
论坛上有很多中文pdf教程,但大部分都是从android开发者中心的Dev Guide和Resources中的内容翻译过来的。所以我觉得如果英文不是很差的话,建议直接阅读上面两节,同时练习其中的例子,保证两周内有很大的进步。
参考
Technorati 标签:android、开放平台、oauth、新浪微博