使用新浪微博开放平台api同步微博内容至自己网站(我要开发一个基于sina微博开放平台的应用(App)(组图))
优采云 发布时间: 2021-10-14 18:31使用新浪微博开放平台api同步微博内容至自己网站(我要开发一个基于sina微博开放平台的应用(App)(组图))
本文文章主要介绍使用Java验证通过OAuth协议发送微博的教程。它使用新浪微博为Java开放的API weibo4j。有需要的朋友可以参考
新浪微博开放平台虽然提供了各种语言的开发SDK下载,但也有基本接口调用的demo和接口说明文档。但是经过这几天的耐心尝试,感觉新浪微博开放平台上的入门指南与下载的Java开发包weibo4j包中的demo使用注释有些不一致。再加上自我理解能力有限,导致了很多困惑。幸运的是,我并没有放弃尝试去理解它。废话少说,以下是我的学习过程。
如果你想通过调用新浪微博开放平台API开发自己的微博应用,首先要有一个新浪微博账号和一个CSDN账号,因为我们需要同时用这两个账号创建一个微博应用获取App key和Secret key。App key和Secret key有什么用?
其实我只是看了新浪微博开放平台上的一系列解释,并不是很了解App key和Secret key的使用。因为更重要的是了解OAuth认证授权的整个过程,以及几个Token和4个URL在整个OAuth认证授权过程中的作用。
当我第一次遇到完全没有概念的 OAuth 时,我认为它是不可能学习的。幸好找到了下面的文章,对理解OAuth很有帮助。链接如下:
OAuth 有 3 个参与者,分别是 User、Service Provider 和 Consumer。假设我想开发一个基于新浪微博开放平台的应用(App),供其他新浪微博用户使用。它们的对应关系如下:
实际上,我们的App相当于User和Provider(新浪微博平台)的第三方应用。作为第三方App,如果要访问用户在新浪微博平台上保存的资源,必须经过一系列的认证和授权才能工作。
下面是根据我对整个OAuth认证和授权流程的理解绘制的图(可以跳过,对以下一些概念有一定了解后再回头看这个流程图):
结合上面的流程图,下面是我对这些术语的理解以及对各个过程的描述:
消费者秘钥和消费者秘钥:在新浪微博开放平台上分别称为App秘钥和秘钥。消费者向提供者申请,希望能够调用其开放的API。申请通过后,Provider将其分配给满足其要求的Consumer,以唯一标识该Consumer满足Provider的要求。
对应上图中的流程1和流程2。
Request Token、Request Secret:当用户访问Consumer,希望获得其特殊服务时,该服务在整合了Provider中存储的用户自己的资源后由Consumer返回。此时,Consumer向Provider请求获取Requst Token,用于唯一标识Consumer和User之间的具体关联。
对应上图中的过程3、4、5。
要处理 6,消费者必须将用户引导至提供者提供的 OAuth 身份验证和授权页面。事实上,浏览器被重定向到带有请求令牌和请求秘密参数的 authenticationURL。URL 由提供商提供。
接下来,User在流程7和流程8中授权Consumer(一般是通过输入账号和密码登录),Provider会被重定向到流程1Consumer提供的Callback_URL,URL参数附加OAuth Token和 OAuth 验证程序。
流程9是Consumer使用之前从Provider获取的Request Token再次向Provider请求获取Access Token。
Access Token,Access Secret:如果流程10中的Provider返回一个未经User授权的Access Token,用于唯一标识特定Consumer可以访问用户在Provider中存储的资源和信息。然后Consumer就可以开始使用获取到的Access Token和Access Secret来访问相应User存储在Provider中的资源了。
在流程11中对用户信息进行整合操作后,即可将具体的服务结果返回给用户。
通过以上对OAuth流程的了解,我们知道,实际上User并没有向第三方Consumer透露登录Provider所需的账号和密码。同时,用户可以使用消费者的特殊服务。多么巧妙而安全的操作过程!
此外,在上图中,Consumer 向 Provider 发出了 3 个不同的请求。实际上,Provider 提供了 3 个不同功能的 URL 供 Consumer 访问。这3个网址在新浪微博开放平台的截图如下:
新浪微博开放平台使用OAuth验证并发布微博
使用新浪微博开放平台的API,首先需要获取新浪分配的App key和App Secret。下面是我创建应用后新浪分配的App key和App Secret(这个要保密)。
然后下载微博SDK,我用的是Java的weibo4j。
将SDK包中的weibo.java类的App Key和App Secret修改为刚刚获取的App Key和App Secret,如下图使用说明所示:
完成这些之后,就可以根据提供的Demo开始编写代码了。如下:
WebOAuth.java用于初始化Weibo.java类所需的App Key和App Secret,并提供getRequestToken()和gettAccessToken()方法获取Request Token和Access Token。所需参数如代码所示。此外,还提供了发布文本微博的update()方法。
package weibo4j.examples; import weibo4j.Status; import weibo4j.Weibo; import weibo4j.WeiboException; import weibo4j.http.AccessToken; import weibo4j.http.RequestToken; import java.io.UnsupportedEncodingException; // Web 方式认证 public class WebOAuth { private Weibo weibo; public WebOAuth(){ // 准备好Consumer Key、Consumer Secret // 对应于新浪微博应用就是申请到的 App key 和 Secret key System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY); System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET); weibo = new Weibo(); } // 根据传入的 callback_url 获取 request token public RequestToken getRequestToken(String backUrl) { try { // 指定 callback_url 并获得 request token RequestToken requestToken = weibo.getOAuthRequestToken(backUrl); System.out.println("Request token: " + requestToken.getToken()); System.out.println("Request token secret: " + requestToken.getTokenSecret()); return requestToken; } catch (Exception e) { System.out.println("获取Request token发生异常!"); e.printStackTrace(); return null; } } // 根据传入的 request token 和 verifier 获取 access token public AccessToken gettAccessToken(RequestToken requestToken, String verifier) { try { AccessToken accessToken = weibo.getOAuthAccessToken(requestToken .getToken(), requestToken.getTokenSecret(), verifier); System.out.println("Access token: " + accessToken.getToken()); System.out.println("Access token secret: " + accessToken.getTokenSecret()); return accessToken; } catch (Exception e) { System.out.println("获取Access token发生异常!"); e.printStackTrace(); return null; } } // 根据传入的 Access Token 和内容发表微博 public void update(AccessToken access, String content) { try { weibo.setToken(access.getToken(), access.getTokenSecret()); content = new String(content.getBytes("GBK"), "UTF-8"); Status status = weibo.updateStatus(content); System.out.println("成功发表微博:" + status.getText() + "."); } catch (UnsupportedEncodingException e) { System.out.println("微博内容转编码发生异常!"); e.printStackTrace(); } catch (WeiboException e) { System.out.println("发表微博发生异常!"); e.printStackTrace(); } } } request.jsp,用于提供 callback_url(这里我们自定义为下文中的callback.jsp),当获取得到RequestToken之后,保存该RequestToken到Session中,并将页面重定向到callback.jsp进行验证、授权。 请点击进行Web方式的OAuth认证!
callback.jsp,在上一步重定向之后,oauth_verifier 参数会附加到callback_url。这时候我们根据Session中存储的RequestToken和获取到的oauth_verifier参数来申请AccessToken。获取到AccessToken后,我们将页面重定向到writeWeibo.html页面,用于写微博。
writeWeibo.html,很简单的HTML文件。 发布sina微博 请在这里写上140字符以内的文本:</br>测试新浪微博!</br></br> updateWeibo.jsp,用于发表文本微博,即调用WebOAuth.java 中的update方法。
在运行之前,我们要准备好Tomcat,把上面的源文件放到正确的目录下。另外,SDK包中收录的commons-httpclient-3.1.jar包也要添加到\WEB-INF\lib目录下,以及weibo4j.jar(里面是具体的新浪微博开放平台中的Java实现)。
运行Tomcat,在浏览器中访问request.jsp页面,如下图:
点击链接,如下图(注意地址栏的变化):
地址栏的网址如下:
://localhost:8080/sinaweibo/callback.jsp
填写具体有效的新浪微博账号、密码并授权。以下是我用来测试授权的微博账号的填写结果:
地址栏的网址如下:
:8080/sinaweibo/writeWeibo.html
点击“发布”,如下图:
登录微博查看,如下图:
查看账户授权的应用列表:
到目前为止,关于 OAuth
使用新浪微博开放平台发布微博的方式大概就是这个过程。
概括:
1、 其实还有很多细节没说到。我试了很多次才发现问题,理解问题,然后解决问题。
2、 如果我们登录新浪微博的账号信息cookie已经保存在浏览器中,那么授权时就不需要输入账号信息了,当然不用当前账号也可以修改用于授权;
3、 控制台中也有一些输入的信息,比如Token、URL、服务器返回信息等,截图中没有显示。
以上就是使用Java验证OAuth协议发送微博的教程的详细内容。更多详情请关注其他相关html中文网站文章!