最近有个项目中需要调用微博的api发新微博,网上找了很多相关教程,遇到了很多坑。后来给官方发邮件询问才知道微博官方早在2017年3月份就调整了相关接口,取消了网上现有教程中的发送微博的接口(updateStatus),导致如果再调用此接口都会提示权限不足,当时折腾了好久。特此发一篇新的文章,希望大家不要掉进坑。
一,登录开放平台创建应用
首先需要去微博开放平台申请开发者账号创建新应用。可直接用用微博账号登录,登录后点击微连接选择其他根据自己需要(客户端,网页应用和浏览器插件)选择创建新应用。
二,应用相关设置
首先在应用信息中编辑应用的基本信息包括应用介绍用途什么的,一定要填写安全域名,自己做测试可随便填,企业应用时应填写企业的相关域名。
还需要在应用高级信息中设置OAuth2.0的授权回调页面,这个测试时也可以随便填写,当应用发起用户授权时成功或则取消跳转的页面地址。
三,下载微博java sdk
sdk下载地址点击后回跳到github页面,页面也有实例提示如何使用,下载即可。下载后导入代码编辑器中。最重要的一步:修改config.properties文件中的字段值。值的来源都是应用信息中。
四 ,运行实例获取授权码
配置文件修改完毕后,首先打开examples包下的oauth2.0下的OAuth4Code.java文件,直接用运行main方法即可。此刻默认浏览器会打开用户授权页面,授权后浏览器地址最后会多出一个code=******,复制该code粘贴到编辑器的控制台,然后回车,就会返回授权信息。
复制返回的授权信息中的accessToken的值,该值为授权码。
AccessToken [accessToken=2.00******, expireIn=11255**, refreshToken=,uid=****]有了该授权码,接着我们就可以正式操作微博了。
注:在微博api中所有的操作都是需要经过OAuth2.0授权的,调用每个方法都需要一个授权码,未经审核的应用授权码只有一天的有效期,通过后有30天的有效期,而如果是应用所属的开发者授权时是5年。所以开发者需要在调用时应判断授权码有效期,过期应引导用户重新授权。
五,api应用之发微博
在examples包下全是微博官方api实例,之前的发送微博接口在weibo4j.examples.timeline下。其中UpdateStatus.java和Upload.java一个是发送微博文字一个是发送带图片的微博实例。打开后发现微博发送都是调用的weibo4j.Timeline.java的类。
但是微博官方已经取消了updateStatus等相关发送微博接口,这些接口都不能再调用了,但是java的sdk由于是2014的版本,所以里面还是存在这些方法。随之替代以前updateStatus接口的是statuses/share(第三方分享链接到微博)
我们使用该接口发送一条微博,由于java sdk是2014的版本所以该版本中并没有该接口方法,所以我们需要自己按照他的调用方式写一个新的接口。由于该接口只有个两个是必须的参数一个微博文字和授权码,和updateStatus的类似。所以我们可以打开weibo4j.Timeline.java中找到updateStatus的方法,复制一份改掉方法名,将json替换掉即可。这样一个不带图片的微博发送就方法就完成了。
-
public Status updateStatus(String status) throws WeiboException {
-
return new Status(client.post(WeiboConfig.getValue("baseURL")
-
+ "statuses/update.json",
-
new PostParameter[] { new PostParameter("status", status) },
-
access_token));
-
}
-
/**
-
* 第三方分享微博
-
* @param status
-
* @return
-
* @throws WeiboException
-
*/
-
public Status share(String status) throws WeiboException {
-
return new Status(client.post(WeiboConfig.getValue("baseURL")
-
+ "statuses/share.json",
-
new PostParameter[] { new PostParameter("status", status) },
-
access_token));
-
}
接着我们调用一下该方法,由于该接口是第三方分享到微博,所以内容中必须带一个第三方地址详见该接口参数说明,地址必须是应用设置中的安全域名下的URL。
-
public static void main(String[] args) {
-
String access_token = "2.00**********";
-
String statuses = "该条微博由JAVA程序发送,目的测试其微博相关api,并无实际用途。https://baike.baidu.com/item/Java/85979?fr=aladdin";
-
Timeline tm = new Timeline(access_token);
-
try {
-
Status share = tm.share(statuses);
-
System.out.println(share);
-
} catch (WeiboException e) {
-
e.printStackTrace();
-
}}
至此微博就发送成功了。