最近需要用新浪微博的开放平台写个程序,首当其冲的就是程序的接口认证问题。这里正式记录下。
接口认证的直接目标是获取 access_token
值。应用程序通过 access_token
访问用户的微博账号:读取 timeline、读取用户收藏的微博、发表评论……
首先是安装和配置。
- 去新浪微博的开放平台注册应用程序,注册成功后,需要用到该应用的以下信息:App Key、App Secret、授权回调页(填写一个可访问的网址即可,eg. https://pingx.sh)。
- 下载新浪微博提供的 Java SDK,我这里使用的版本是 weibo4j-oauth2-beta2.1.1.zip,下载地址在此。
这里有个坑,不得不提醒一下。
新浪微博的 Java SDK 代码托管在 Google Code 上,VCS 采用的是 SVN。但是——SVN 仓库里的代码不是最新的,而是最旧的!(可以通过 svn log -v
查看)。正确的下载应该通过 Downloads 这个链接,下载 .zip
文件。
我一开始没有注意到这点,浪费了不少时间。渣浪这点做得真不专业。
- 解压下载好的新浪微博的 Java SDK,该工程名称默认为
weibo4j-oauth2
- 用 Eclipse 导入
weibo4j-oauth2
这个工程 - 修改
weibo4j-oauth2/src/config.properties
配置文件:client_ID
、client_SERCRET
和redirect_URI
三项值默认为空,需要分别修改为上面提到的 App Key、App Secret、授权回调页。
安装、配置过程已完成,接下来便是获取 access_token
值。
如果你完全按照 Google Code 上的说明来测试的话,你又要被渣浪坑了。因为那些说明并不是针对当前最新版本的 SDK 而言的,也就是说,Google Code 上的文档没有更新!这里又算一个坑。
这里的区别在于认证函数的函数参数上有明显变化。认证使用的是 weibo4j.examples.oauth2
这个 package 下的 OAuth4Code.java
源文件。大致看一下函数接口,可以看出新版的 OAuth4Code.java
源文件相对于老版的,main()
函数明显多出来 state
和 scope
两个参数,这些是旧版本所不需要的。
再翻一下新浪微博的开发文档(1, 2),不难理解这两个参数的含义与用法。在 Eclipse 中运行 OAuth4Code.java
时,指定参数 test_state friendships_groups_read,friendships_groups_write,statuses_to_me_read
即可。
在 Eclipse 中,如何为程序指定命令行运行参数?鼠标右键:Run As → Run Configurations… → Arguments → Program arguments。
剩下的就简单许多了。运行 OAuth4Code.java
,程序会自动调用浏览器,打开授权页面;授权通过后,浏览器会跳转到授权回调页面,通过这个页面的 URL,可以拿到 code
值;将 code
值填入 Eclipse 的 console 下,回车,我们就可以看到梦寐以求的 access_token
值了!
下面测试 access_token
是否可用。
在 Eclipse 中,打开 weibo4j.examples.timeline
下面的 GetHomeTimeline.java
源文件,指定运行参数为上面已获得的 access_token
值。运行,不出意外的话,便可以看到自己微博的 timeline 了。
参考链接: