要使用sina微博开放平台的API.docx

上传人:b****7 文档编号:25215578 上传时间:2023-06-06 格式:DOCX 页数:18 大小:265.45KB
下载 相关 举报
要使用sina微博开放平台的API.docx_第1页
第1页 / 共18页
要使用sina微博开放平台的API.docx_第2页
第2页 / 共18页
要使用sina微博开放平台的API.docx_第3页
第3页 / 共18页
要使用sina微博开放平台的API.docx_第4页
第4页 / 共18页
要使用sina微博开放平台的API.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

要使用sina微博开放平台的API.docx

《要使用sina微博开放平台的API.docx》由会员分享,可在线阅读,更多相关《要使用sina微博开放平台的API.docx(18页珍藏版)》请在冰豆网上搜索。

要使用sina微博开放平台的API.docx

要使用sina微博开放平台的API

OAuth简介及sina微博开放平台

之前就在新浪微博中创建了一个应用,获得了Appkey和Secretkey以便去调用新浪微博开放平台API学习一下到底是怎样一回事。

前几天连续4天没课,算是比较耐心地去尝试弄明白怎样使用API。

 

 

虽然新浪微博开放平台中提供各种语言版本的开发SDK下载,也各自附有一些基本接口调用的Demo和接口说明文档。

但是这几天的耐心尝试之后,感觉新浪微博开放平台上的入门指导和下载到的Java开发包weibo4j包里面的Demo使用注释有些不一致。

再加上自身领悟能力有限,导致遇到好些摸不着头脑的难题。

不过幸好没有放弃去尝试弄懂它。

废话少说,下面是我学习的过程。

 

 

想要通过调用新浪微博开放平台API开发自己的微博应用,第一步是拥有sina微博账号和CSDN账号,因为我们要同时用这两个账号创建微博应用,以此获得Appkey和Secretkey。

那Appkey和Secretkey有什么用?

 

 

其实我单单看了sina微博开放平台的一系列说明都不怎么理解Appkey和Secretkey有啥用。

因为更加重点是必须理解OAuth认证、授权的整个流程,以及在整个OAuth认证、授权流程中好几个Token、4个URL的作用。

 

 

刚开始遇到完全没个概念的OAuth时,以为就没戏学习不下去了。

好在搜到下面这些文章,对于理解OAuth非常有帮助,链接如下:

 

OAUTH协议简介

基于OAuth安全协议的Java应用编程

在Twitter应用中使用OAuth 

在OAuth中有3个参与者,分别是User、ServiceProvider、Consumer。

假设我要开发一个基于sina微博开放平台的应用(App),供其他sina微博用户使用。

它们的对应关系如下:

 

User => 想要使用此App的sina微博用户

Provider => sina微博开放平台

Consumer => App 

其实我们这个App对于User和Provider(sina微博平台)来说,相当于一个第三方应用。

作为第三方的App想要访问User保存于sina微博平台中的资源,肯定必须经过一系列认证和授权之后才能够行得通。

 

 

下面是基于我对整个OAuth认证、授权流程的理解画成的图(可以看一下跳过,当对后面的一些概念有一定理解之后再回头看看这流程图):

结合上面的流程图,下面是我对这些术语的理解以及各个流程的描述:

 

Consumerkey、ConsumerSecret:

在sina微博开放平台分别称为Appkey、Secretkey。

Consumer向Provider申请希望能够调用其开放API,申请通过后由Provider分配给符合其要求的Consumer,用于唯一标识该Consumer符合Provider的要求。

对应于上图的流程1和2。

 

 

RequestToken、RequestSecret:

当User访问Consumer并希望能够获得其特殊服务,该服务由Consumer对User自身存放在Provider中的资源进行整合操作之后返回。

此时Consumer向Provider请求获得RequstToken,用于唯一标识该Consumer与该User的特定关联。

对应于上图的流程3、4、5。

 

 

至流程6,Consumer必须把User引导到Provider所提供的OAuth认证、授权页面,其实就是浏览器重定向到附加有RequestToken和RequestSecret参数的authenticationURL。

该URL由Provider提供。

 

 

接下来流程7和8中User授权该Consumer(一般是通过输入账号、密码登录而已),则Provider将重定向到流程1中Consumer提供的Callback_URL,并且在该URL参数中附加了OAuthToken和OAuthVerifier。

 

流程9是Consumer通过之前已从Provider那里获取来的RequestToken再次请求Provider以获取AccessToken。

 

 

AccessToken、AccessSecret:

若流程10中Provider返回一个未经User授权的AccessToken,它用于唯一标识特定Consumer可以访问某User存放在Provider中的资源、信息。

那么Consumer就可以开始使用获取到的AccessToken和AccessSecret访问对应User存放在Provider中的资源。

 

经过流程11中对User信息的整合、操作之后,就可以将特定的服务结果返回给User了。

 

通过上面对于OAuth流程的理解,我们知道其实User完全没有将自己登录Provider所需的账号、密码等泄露给第三方的Consumer。

同时User又能使用到Consumer的特殊服务。

真是很巧妙的而又安全的操作流程啊!

    

      此外,上图中Consumer有3次与Provider发出不同的请求,其实就是由Provider提供3个不同作用的URL给Consumer访问。

在sina微博开放平台中这3个URL的截图如下:

小结:

 

1、以上对于OAuth的流程理解非常有可能存在误解,因为我更多的是根据sina微博开发包weibo4j中的代码的理解,以及动手做测试总结出来的。

当然,上面那些文章包括sina微博的部分API文档我都看了好几遍了…希望若发现错误,请指正一下,谢谢!

 

2、光是一些理论知识的理解还不够,要动手操作实现一下,下一篇文章应该就会给出实际代码了。

sina微博开放平台中使用OAuth验证并发表微博

要使用sina微博开放平台的API,应先获取sina分配的Appkey和AppSecret,下面是我创建应用之后sina分配的Appkey和AppSecret(这个可是要保密的哦)。

 然后是下载微博SDK,我用Java的weibo4j。

目前有以下的语言版本:

 

修改SDK包里面Weibo.java类的AppKey和AppSecret为刚刚获取的AppKey和AppSecret,如下图使用说明所示:

 

完成了这些之后,就可以根据提供的Demo开始写代码了。

如下:

 

WebOAuth.java,用于初始化Weibo.java类所需的AppKey和AppSecret,并提供获取RequestToken和AccessToken的方法getRequestToken()、gettAccessToken(),其所需参数如代码所示。

另外,还提供了发布一个文本微博的方法update()。

1.package weibo4j.examples; 

2. 

3.import weibo4j.Status; 

4.import weibo4j.Weibo; 

5.import weibo4j.WeiboException; 

6.import weibo4j.http.AccessToken; 

7.import weibo4j.http.RequestToken; 

8.import java.io.UnsupportedEncodingException; 

9. 

10.// Web 方式认证 

11.public class WebOAuth { 

12.    private Weibo weibo; 

13. 

14.    public WebOAuth(){       

15.        // 准备好Consumer Key、Consumer Secret 

16.        // 对应于新浪微博应用就是申请到的 App key 和 Secret key 

17.        System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY); 

18.        System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET); 

19.        weibo = new Weibo(); 

20.    } 

21. 

22.    // 根据传入的 callback_url 获取 request token 

23.    public RequestToken getRequestToken(String backUrl) { 

24.        try { 

25.            // 指定 callback_url 并获得 request token 

26.            RequestToken requestToken = weibo.getOAuthRequestToken(backUrl); 

27. 

28.            System.out.println("Request token:

 " + requestToken.getToken()); 

29.            System.out.println("Request token secret:

 " + requestToken.getTokenSecret()); 

30. 

31.            return requestToken; 

32.        } catch (Exception e) { 

33.            System.out.println("获取Request token发生异常!

"); 

34.            e.printStackTrace(); 

35.            return null; 

36.        } 

37.    } 

38. 

39.    // 根据传入的 request token 和 verifier 获取 access token 

40.    public AccessToken gettAccessToken(RequestToken requestToken, String verifier) { 

41.        try {            

42.            AccessToken accessToken = weibo.getOAuthAccessToken(requestToken 

43.                    .getToken(), requestToken.getTokenSecret(), verifier); 

44.             

45.            System.out.println("Access token:

 " + accessToken.getToken()); 

46.            System.out.println("Access token secret:

 " + accessToken.getTokenSecret()); 

47. 

48.            return accessToken; 

49.        } catch (Exception e) { 

50.            System.out.println("获取Access token发生异常!

"); 

51.            e.printStackTrace(); 

52.            return null; 

53.        } 

54.    } 

55. 

56.    // 根据传入的 Access Token 和内容发表微博 

57.    public void update(AccessToken access, String content) { 

58.        try { 

59.            weibo.setToken(access.getToken(), access.getTokenSecret()); 

60.            content = new String(content.getBytes("GBK"), "UTF-8"); 

61.            Status status = weibo.updateStatus(content); 

62.            System.out.println("成功发表微博:

" + status.getText() + "."); 

63.        } catch (UnsupportedEncodingException e) { 

64.            System.out.println("微博内容转编码发生异常!

"); 

65.            e.printStackTrace(); 

66.        } catch (WeiboException e) { 

67.            System.out.println("发表微博发生异常!

"); 

68.            e.printStackTrace(); 

69.        } 

70.    } 

71.} 

request.jsp,用于提供callback_url(这里我们自定义为下文中的callback.jsp),当获取得到RequestToken之后,保存该RequestToken到Session中,并将页面重定向到callback.jsp进行验证、授权。

1.<%@ page contentType="text/html;charset=utf-8" %> 

2.<%@ page language="java" import="weibo4j.*" %> 

3.<%@ page language="java" import="weibo4j.http.*" %> 

4.<%@ page language="java" import="weibo4j.util.*" %> 

5. 

6.

useBean id="weboauth" scope="session" class="weibo4j.examples.WebOAuth" /> 

7. 

8.<% 

9.    if("1".equals(request.getParameter("opt"))) 

10.    { 

11.        // 传入callback_url 

12.        String callback_url = "http:

//localhost:

8080/sinaweibo/callback.jsp"; 

13.        RequestToken requestToken = weboauth.getRequestToken(callback_url); 

14.         

15.        if(requestToken !

= null){ 

16.            out.println(requestToken.getToken()); 

17.            out.println(requestToken.getTokenSecret()); 

18.            session.setAttribute("requestToken",requestToken); 

19. 

20.            String url = requestToken.getAuthorizationURL()+"&oauth_callback="+callback_url; 

21.            System.out.println("AuthorizationURL:

" + url); 

22. 

23.            //BareBonesBrowserLaunch.openURL(callback_url); 

24.            //response.sendRedirect(requestToken.getAuthorizationURL()); 

25. 

26.            // 重定向到附加了callback_url回调地址的sina微博认证页面 

27.            response.sendRedirect(url); 

28.        }else{ 

29.            out.println("request error"); 

30.        } 

31.    }else{ 

32.%> 

33.        

opt=1">请点击进行Web方式的OAuth认证!

    

34.<%  }   %> 

 

callback.jsp,在上一步中重定向之后,callback_url后面会被附加了oauth_verifier参数,此时我们根据保存在Session中的RequestToken和获取到的oauth_verifier参数申请获得AccessToken。

一旦获得AccessToken,我们再把页面重定向到编写微博的页面writeWeibo.html。

1.<%@ page contentType="text/html;charset=utf-8" %> 

2.<%@ page language="java" import="weibo4j.http.*" %> 

3.<%@ page language="java" import="weibo4j.*" %> 

4. 

5.

useBean id="weboauth" scope="session" class="weibo4j.examples.WebOAuth" /> 

6.<% 

7.    // 获得HTTP请求中的 oauth_verifier 参数 

8.    String verifier=request.getParameter("oauth_verifier"); 

9. 

10.    out.println("oauth_verifier:

"+verifier); 

11.    System.out.println("oauth_verifier:

"+verifier); 

12. 

13.    if(verifier !

= null){ 

14. 

15.        RequestToken requestToken = (RequestToken)session.getAttribute("requestToken"); 

16. 

17.        if(requestToken !

= null){ 

18. 

19.            AccessToken accessToken = weboauth.gettAccessToken(requestToken,verifier); 

20. 

21.            if(accessToken !

= null){ 

22.                try{ 

23.                    session.setAttribute("accessToken",accessToken);                     

24. 

25.                    out.println("5 秒后转到 writeWeibo.html"); 

26.                    Thread.sleep(5000); 

27.                    response.sendRedirect("http:

//localhost:

8080/sinaweibo/writeWeibo.html"); 

28. 

29.                }catch(Exception e){ 

30.                    e.printStackTrace(); 

31.                }                

32.            }else{ 

33.                out.println("access token request error"); 

34.            }        

35.        }else{ 

36.            out.println("request token session error"); 

37.        } 

38.    }else{ 

39.        out.println("verifier String error"); 

40.    } 

41.%> 

 

writeWeibo.html,很简单的HTML文件。

1. 

2.    发布sina微博 

3.     

4.            

5.            请在这里写上140字符以内的文本:


 

6.            测试新浪微博!


 

7.             

8.            
 

9.        

 

10.     

11. 

 

updateWeibo.jsp,用于发表文本微博,即调用WebOAuth.java中的update方法。

1.<%@ page contentType="text/html;charset=utf-8" %> 

2.<%@ page language="java" import="weibo4j.http.*" %> 

3.<%@ page language="java" 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1