Java基于新浪微博SDK实现发微博的功能

时间:2022-09-04 10:23:24

背景

最近用实现了一个简单的发微博的功能。
新浪微博的SDK已经经历了多次更新,而网上的资料、教程大多还是基于旧版本的,很多细节上有了一些变化。本文将基于最新的新浪微博SDK介绍发微博的过程。

简介

首先,需要在新浪微博开放平台创建自己的应用,获取App Key与App Secret两个字符串。
然后,下载新浪微博SDK。在配置文件中填入上一步获得点的AppKey与App Secret,以及回调地址。
运行例子程序中的weibo4j.examples.oauth2里的Oauth4Code.java,将会引导用户对你创建的应用授权。
授权完成后,一个code将会被传到回调地址。
将这个code输入控制台,会得到一个access_token。
利用这个access_token就可以调用发微博API了。

详解

创建应用

进入新浪微博开放平台
点击上方的微连接-其他,开始创建新应用。
填入应用名称,选择应用类型。在以前,”站内应用”是一个很方便的类型。但是现在已经没了,我选择的是”客户端”-“桌面”-“windows”。
创建成功后,进入应用基本信息页面,其中,App Key和App Secret已经生成了。
然后要进入 应用信息-高级信息-Oauth2授权设置 设置回调地址。如下图所示。
Java基于新浪微博SDK实现发微博的功能
在这个简单的发微博功能中,我们不会真正用到回调地址。将回调地址设为百度是个不错的选择。

新浪微博SDK

新浪微博SDK下载
本以为新浪微博SDK会是一个jar包,结果却是一堆源码与资源文件,以及许多例子程序。
下载后,编辑Config.properties配置文件。
client_ID :appkey
client_SERCRET :app secret
redirect_URI : 回调地址
这三个参数都必须跟上一步得到的保持一致。
运行例子程序中的weibo4j.examples.oauth2里的Oauth4Code.java,将会打开默认浏览器,进入应用授权界面。
授权成功后,将会跳转到回调地址(我们填入的是百度),
地址栏中显示的是http://www.baidu.com/?code=******************
**************复制下来,填入控制台。
Java基于新浪微博SDK实现发微博的功能
输入code。
如果输入正确,access_token将被输出。
access_token有多个键值对,阅读源码可知道AccessToken.getAccessToken()方法可以取出其中的access_token字符串。这个字符串就是我们需要的“令牌”。
而发送微博的功能只需要两行代码即可实现

Timeline tm = new Timeline("前面得到的access_token");
tm.updateStatus("微博内容");

demo

这里给出一个简单的demo,运行后手动输入code即可自动发送微博。

public static void main(String[] args){
//TODO Auto-generated method stub
try {
Oauth oauth = new Oauth();
BareBonesBrowserLaunch.openURL(oauth.authorize("code"));
System.out.println(oauth.authorize("code"));
System.out.print("Hit enter when it's done.[Enter]:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
String access_token =oauth.getAccessTokenByCode(code).getAccessToken();
Timeline tm = new Timeline(access_token);
tm.updateStatus("测试:自动发送微博。");
} catch (WeiboException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

总结

到这里,发送微博的功能已经实现了。
但是其中有个问题,code必须手动从浏览器地址栏取出后输入我们的应用。而作为一个桌面应用,这个过程没什么简单的办法去掉。如果是网页应用的话,倒是比较容易获取。
有一个思路是通过代码模拟浏览器行为,但这很困难,因为新浪微博登录过程中对账号密码进行了比较复杂的加密,而加密算法藏得比较深难以找到。网上倒是有不少文章分析了这一过程,但新浪微博的加密算法也不是一成不变的,网上的方法基本上都已经过时。