职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 766|回复: 5

新浪微博---开放平台的使用01

[复制链接]
Jethro 发表于 2011-6-20 16:34 | 显示全部楼层 |阅读模式
现在有很多的开放平台,可以供第三方来基于这些开放平台开发应用程序,最近在做新浪微博的一个小例子,刚刚入门,高手勿拍砖!
1、http://open.weibo.com这个是新浪的开放平台,里面有SDK,有开发文档等等

2、下载SDK,我暂时先下载了一个JAVA的SDK来实验一下,具体地址:http://open.weibo.com/wiki/index.php/SDK#Java_SDK

3、将其解压到eclipse的workspace里面,然后导入到eclipse

4、开发第三方应用程序,需要创建一下应用,之后你会得到一个
Key
App Key:
1211******
App Secret:
d6b*****************************

5、一开始是找到的是weibo4j.Weibo.java、weibo4j.examples.statues.UpdateStatus.java文件,于是在UpdateStatus.java里修改了一下Key和Secret的值,当然如果用默认的,好像是不出错的,但是我用了一下自己的,却出错了,什么错误呢?
Java代码  
weibo4j.WeiboException: 403:The request is understood, but it has been refused.  An accompanying error message will explain why.   
{"request":"/statuses/update.json","error_code":"403","error":"40320:Error: basic auth  forbidden !"}   
  
    at weibo4j.http.HttpClient.httpRequest(HttpClient.java:669)   
    at weibo4j.http.HttpClient.httpRequest(HttpClient.java:611)   
    at weibo4j.http.HttpClient.post(HttpClient.java:435)   
    at weibo4j.Weibo.updateStatus(Weibo.java:1276)   
    at weibo4j.examples.statuses.UpdateStatus.main(UpdateStatus.java:28)  

weibo4j.WeiboException: 403:The request is understood, but it has been refused.  An accompanying error message will explain why.
{"request":"/statuses/update.json","error_code":"403","error":"40320:Error: basic auth  forbidden !"}

        at weibo4j.http.HttpClient.httpRequest(HttpClient.java:669)
        at weibo4j.http.HttpClient.httpRequest(HttpClient.java:611)
        at weibo4j.http.HttpClient.post(HttpClient.java:435)
        at weibo4j.Weibo.updateStatus(Weibo.java:1276)
        at weibo4j.examples.statuses.UpdateStatus.main(UpdateStatus.java:28)网上说的是:将自己添加为测试用户
①登录开放平台,我的应用--编辑应用属性---测试用户UID
②这个UID就是你注册新浪微博的时候,分配给你的一串类似于QQ号的东西,可以到“我的微博” ,上面会有你的名字和微博的ID,这串数字就是UID
③将UID放到输入框里,就会将你自己添加为测试用户



看到basic auth认证机制不能用了,于是我将
Weibo weibo = getWeibo(false,args);里面的false改为true,让它使用OAuth认证,但是可能是由于我太菜了,运行后还是有问题,再次如果有那个朋友知道的话帮个忙哈
Java代码  
args = new String[]{"xxxxx@.sina.cn","*******"};   
            Weibo weibo = getWeibo(false,args);   
   
            Status status = weibo.updateStatus("心语互动测试成功!");   
            System.out.println(status.getId() + " : "+ status.getText()+"  "+status.getCreatedAt());  

args = new String[]{"xxxxx@.sina.cn","*******"};
                Weibo weibo = getWeibo(false,args);

                Status status = weibo.updateStatus("心语互动测试成功!");
                System.out.println(status.getId() + " : "+ status.getText()+"  "+status.getCreatedAt());  
上面是UpdateStatus里面的代码,下面是运行后的错误
Java代码  
weibo4j.WeiboException: 403:The request is understood, but it has been refused.  An accompanying error message will explain why.   
{"request":"/statuses/update.json","error_code":"403","error":"40320:Error: basic auth  forbidden !"}   
  
    at weibo4j.http.HttpClient.httpRequest(HttpClient.java:669)   
    at weibo4j.http.HttpClient.httpRequest(HttpClient.java:611)   
    at weibo4j.http.HttpClient.post(HttpClient.java:435)   
    at weibo4j.Weibo.updateStatus(Weibo.java:1276)   
    at weibo4j.examples.statuses.UpdateStatus.main(UpdateStatus.java:28)  

weibo4j.WeiboException: 403:The request is understood, but it has been refused.  An accompanying error message will explain why.
{"request":"/statuses/update.json","error_code":"403","error":"40320:Error: basic auth  forbidden !"}

        at weibo4j.http.HttpClient.httpRequest(HttpClient.java:669)
        at weibo4j.http.HttpClient.httpRequest(HttpClient.java:611)
        at weibo4j.http.HttpClient.post(HttpClient.java:435)
        at weibo4j.Weibo.updateStatus(Weibo.java:1276)
        at weibo4j.examples.statuses.UpdateStatus.main(UpdateStatus.java:28) 即使查了错误代码,还是不知道到底是哪里错了

6、后来我看了一下readme.txt说明文档,想用不需要认证的OAuth来试试,于是按照它的说法:
    OAuth桌面应用访问
步骤: 1> 在weibo4j.examples.OAuthUpdate 访问认证的URL,得到pin
2> 在weibo4j.examples.OAuthUpdate 输入pin,然后得到AccessToken
3> 即可访问用户的微博,参考:weibo4j.examples.OAuthUpdateTwo

weibo4j.examples.OAuthUpdateTwo
尝试了一下,运行后控制台下会有个链接,点击这个链接,会得到一个pin:350576
在控制台输入pin后,得到了
Access token: f520d1efb5532e6daf**************
Access token secret: ddb5f6990b66579fe4**************

7、然后将Access token和Access token secret放入weibo4j.examples.OAuthUpdateTwo中
Java代码  
/*  
             * 此处需要填写AccessToken的key和Secret,可以从OAuthUpdate的执行结果中拷贝过来  
             */  
           // weibo.setToken("AccessToken", "AccessTokenSecret");   
            weibo.setToken("f520d1efb5532e6daf**************", "ddb5f6990b66579fe4**************");  

/*
                         * 此处需要填写AccessToken的key和Secret,可以从OAuthUpdate的执行结果中拷贝过来
             */
           // weibo.setToken("AccessToken", "AccessTokenSecret");
            weibo.setToken("f520d1efb5532e6daf**************", "ddb5f6990b66579fe4**************");  
8、下面这条语句是更新状态的语句,你可以输入你想说的
Java代码  
Status status = weibo.updateStatus("你好吗?");  

Status status = weibo.updateStatus("你好吗?");
9、然后还要将你的用户名和密码加入到里面,注意红色部分
Java代码  
<STRONG><SPAN style="COLOR: #ff0000">args = new String[]{"*******@sina.cn","*******"};</SPAN></STRONG>   
            if (args.length < 2) {   
                System.out.println(   
                    "Usage: java weibo4j.examples.OAuthUpdateTwo token tokenSecret");   
                System.exit( -1);   
            }  

args = new String[]{"*******@sina.cn","*******"};
                if (args.length < 2) {
                    System.out.println(
                        "Usage: java weibo4j.examples.OAuthUpdateTwo token tokenSecret");
                    System.exit( -1);
                } 10、运行JAVA程序,然后更新博客,你会看到状态更新了




大小: 11.3 KB

大小: 3.3 KB
查看图片附件

无处不在 发表于 2011-6-20 16:34 | 显示全部楼层
9、然后还要将你的用户名和密码加入到里面,注意红色部分


没有意义吧。。。拿到
Access token: f520d1efb5532e6daf**************

Access token secret: ddb5f6990b66579fe4**************

就可以了。。

已经来了吗 发表于 2011-6-20 16:34 | 显示全部楼层
kala888 写道
9、然后还要将你的用户名和密码加入到里面,注意红色部分


没有意义吧。。。拿到
Access token: f520d1efb5532e6daf**************

Access token secret: ddb5f6990b66579fe4**************

就可以了。。

但是没有加用户名和密码会报错,当时我也是按照说明文档来做的,后来加上了用户名和密码后,可以运行了,具体原因我还在研究中...

叫我小乖 发表于 2011-6-20 16:34 | 显示全部楼层
我做过一个小应用,只要有Access token和Access token secret就可以了,不要用户名密码

另外我想问个相关的问题
类似开放平台的认证都用到了request token 和 access token
用request token换取access token的意义何在,为什么不能直接拿到access token
还有request token 和 access token都各自对应一个secret

有人能解释下原理吗
http://open.weibo.com/wiki/index.php/Oauth

曾经的小孩 发表于 2011-6-20 16:35 | 显示全部楼层
oauth1.0的协议就是这样的,出于安全考虑
参考:http://tools.ietf.org/html/rfc5849

能文能武 发表于 2011-6-20 16:35 | 显示全部楼层
ewong 写道
我做过一个小应用,只要有Access token和Access token secret就可以了,不要用户名密码

另外我想问个相关的问题
类似开放平台的认证都用到了request token 和 access token
用request token换取access token的意义何在,为什么不能直接拿到access token
还有request token 和 access token都各自对应一个secret

有人能解释下原理吗
http://open.weibo.com/wiki/index.php/Oauth


用request_token是因为request_token被授权后,会暴露在url中, 被认为是不安全的,因此被设计为一次性使用,换取access_token后即作废。 access_token全程是在后台进行交互的,被认为是安全的。

secret,是为了确保token所有权的签名密钥。

还有个timestamp和nonce, 是防止重放攻击的




您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-28 23:06 , Processed in 0.135465 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表