新浪微博应用开发之Java篇
2012年11月11日星期日
一、开发流程简介:
2、 在以下地址创建一个应用,假设创建一个桌面应用:
3、 进入管理中心,查看并记住应用ID和密码:
4、 在“应用中心-高级信息”设置回调页面(设置后一般需要半小时左右才能生效):
OK,准备工作完成!
二、不使用任何SDK实现Oauth授权并实现简单的发布微博功能:
创建一个Java项目,编写如下代码,具体过程代码中已写的很清楚,这里不再做解释:
注意先修改应用ID、应用密码和回调页面成你自己的!访问授权页面:
packagecom;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.URL;importjava.net.URLConnection;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.Scanner;importjavax.net.ssl.X509TrustManager;/***@author刘显安
* 不使用任何SDK实现新浪微博Oauth授权并实现发微薄小Demo
* 日期:2012年11月11日*/
public classTest
{static String clientId="2355065950";//你的应用ID
static String clientSecret="72037e76bee00315691d9c30dd8a386a";//你的应用密码
static String redirectUri="https://api.weibo.com/oauth2/default.html";//你在应用管理中心设置的回调页面
public static void main(String[] args) throwsException
{
testHttps();//测试//第一步:访问授权页面获取授权
System.out.println("请打开你的浏览器,访问以下页面,登录你的微博账号并授权:");
System.out.println("https://api.weibo.com/oauth2/authorize?client_id="+clientId+"&response_type=code&redirect_uri="+redirectUri+"&forcelogin=true");//第二步:获取AccessToken
System.out.println("请将授权成功后的页面地址栏中的参数code:");
String code=newScanner(System.in).next();
getAccessToken(code);//第三步:发布一条微博
System.out.println("请输入上面返回的值中accessToken的值:");
String accessToken=newScanner(System.in).next();
updateStatus("发布微博测试!来自WeiboDemo!", accessToken);
}/*** 测试能否正常访问HTTPS打头的网站,*/
public static voidtestHttps()
{try{
trustAllHttpsCertificates();//设置信任所有的http证书
URL url=new URL("https://api.weibo.com/oauth2/default.html");
URLConnection con=url.openConnection();
con.getInputStream();
System.out.println("恭喜,访问HTTPS打头的网站正常!");
}catch(Exception e)
{
e.printStackTrace();
}
}/*** 以Post方式访问一个URL
*@paramurl 要访问的URL
*@paramparameters URL后面“?”后面跟着的参数*/
public static voidpostUrl(String url,String parameters)
{try{
trustAllHttpsCertificates();//设置信任所有的http证书
URLConnection conn = newURL(url).openConnection();
conn.setDoOutput(true);//这里是关键,表示我们要向链接里注入的参数
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());//获得连接输出流
out.write(parameters);
out.flush();
out.close();//到这里已经完成了,开始打印返回的HTML代码
BufferedReader reader = new BufferedReader(newInputStreamReader(conn.getInputStream()));
String line= null;while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}catch(Exception e)
{
e.printStackTrace();
}
}/*** 获取AccessToken
*@paramcode 在授权页面返回的Code*/
public static voidgetAccessToken(String code)
{
String url="https://api.weibo.com/oauth2/access_token";
String parameters="client_id=" +clientId+"&client_secret=" +clientSecret+
"&grant_type=authorization_code" +"&redirect_uri=" +redirectUri+"&code="+code;
postUrl(url, parameters);
}/*** 利用刚获取的AccessToken发布一条微博
*@paramtext 要发布的微博内容
*@paramaccessToken 刚获取的AccessToken*/
public static voidupdateStatus(String text,String accessToken)
{
String url="https://api.weibo.com/2/statuses/update.json";
String parameters="status="+text+"&access_token="+accessToken;
postUrl(url, parameters);
System.out.println("发布微博成功!");
}/*** 设置信任所有的http证书(正常情况下访问https打头的网站会出现证书不信任相关错误,所以必须在访问前调用此方法)
*@throwsException*/
private static void trustAllHttpsCertificates() throwsException
{
javax.net.ssl.TrustManager[] trustAllCerts= new javax.net.ssl.TrustManager[1];
trustAllCerts[0] = newX509TrustManager()
{
@OverridepublicX509Certificate[] getAcceptedIssuers()
{return null;
}
@Overridepublic voidcheckServerTrusted(X509Certificate[] arg0, String arg1)throwsCertificateException
{}
@Overridepublic voidcheckClientTrusted(X509Certificate[] arg0, String arg1)throwsCertificateException
{}
};
javax.net.ssl.SSLContext sc= javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
}
访问授权页面:
授权成功:
发布微博成功:
控制台输出结果:
三、使用weibo4j-oauth2这个SDK做一个简单的抢沙发工具:
1、SDK下载:
下载下来是个包含测试代码的整个SDK源代码,可以打包成jar文件方便调用,我这里打包成名为weibo4j-oauth2.jar的文件,注意先修改config.properties文件中的应用id、应用密码、回调页面。
2、在项目中导入以下6个包:
3、使用WindowsBuild新建一个Jframe窗体,大体布局如下:
三个按钮的事件分别如下:
public Date minTime;//最近一条微博的更新时间
/*** 打开授权页面*/
public voidopenUrl()
{try{
BareBonesBrowserLaunch.openURL(new Oauth().authorize("code"));
}catch(WeiboException e)
{
e.printStackTrace();
}
}/*** 获取当前登录用户的好友列表*/
public voidgetFriends()
{try{//获取好友列表
accessToken=newOauth().getAccessTokenByCode(textFieldCode.getText());
Friendships friendships=newFriendships();
friendships.setToken(accessToken.getAccessToken());for(User user:friendships.getFriendsByID(accessToken.getUid()).getUsers())
{
comboBox.addItem(user.getName());
}
}catch(WeiboException e)
{
e.printStackTrace();
}
}/*** 开始监控关注用户的微博
*@throwsWeiboException*/
public voidstart()
{try{
System.out.println("开始监控");
Timeline timeline=newTimeline();
timeline.setToken(accessToken.getAccessToken());
minTime= timeline.getUserTimelineByName(comboBox.getSelectedItem().toString()).getStatuses().get(0).getCreatedAt();
Timer timer=newTimer();
timer.schedule(newTimerTask()
{
@Overridepublic voidrun()
{try{
Timeline timeline=newTimeline();
timeline.setToken(accessToken.getAccessToken());
Status status=timeline.getUserTimelineByName(comboBox.getSelectedItem().toString()).getStatuses().get(0);if(status.getCreatedAt().after(minTime))//如果最新微博的发表时间在之前相对时间的后面
{
minTime=status.getCreatedAt();
System.out.println("你关注的用户更新微博啦");
Comments comments=newComments();
comments.setToken(accessToken.getAccessToken());
comments.createComment("哈哈,我来评论啦!", status.getId());
JOptionPane.showMessageDialog(null, "恭喜,抢沙发成功!");
}
}catch(WeiboException e)
{
e.printStackTrace();
}
}
},0, 5000);//设置5秒钟刷新一次
}catch(WeiboException e)
{
e.printStackTrace();
}
}
项目源代码下载地址:
整理后的SDK下载地址:
有问题可以联系: