新浪微博应用开发之Java篇
2012年11月11日星期日
一、开发流程简介:
1、 访问http://open.weibo.com/注册成为开发者
2、 在以下地址创建一个应用,假设创建一个桌面应用:
javaweb菜鸟教程?http://open.weibo.com/apps/new?sort=mobile
3、 进入管理中心,查看并记住应用ID和密码:
Java博客,
菜鸟教程javaweb。4、 在“应用中心-高级信息”设置回调页面(设置后一般需要半小时左右才能生效):
OK,准备工作完成!
二、不使用任何SDK实现Oauth授权并实现简单的发布微博功能:
javaweb从入门到项目实践?创建一个Java项目,编写如下代码,具体过程代码中已写的很清楚,这里不再做解释:
注意先修改应用ID、应用密码和回调页面成你自己的!访问授权页面:
package com;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Scanner;import javax.net.ssl.X509TrustManager;/*** @author 刘显安* 不使用任何SDK实现新浪微博Oauth授权并实现发微薄小Demo* 日期:2012年11月11日*/ public class Test {static String clientId="2355065950";//你的应用IDstatic String clientSecret="72037e76bee00315691d9c30dd8a386a";//你的应用密码static String redirectUri="https://api.weibo.com/oauth2/default.html";//你在应用管理中心设置的回调页面public static void main(String[] args) throws Exception{testHttps();//测试//第一步:访问授权页面获取授权System.out.println("请打开你的浏览器,访问以下页面,登录你的微博账号并授权:");System.out.println("https://api.weibo.com/oauth2/authorize?client_id="+clientId+"&response_type=code&redirect_uri="+redirectUri+"&forcelogin=true");//第二步:获取AccessTokenSystem.out.println("请将授权成功后的页面地址栏中的参数code:");String code=new Scanner(System.in).next();getAccessToken(code);//第三步:发布一条微博System.out.println("请输入上面返回的值中accessToken的值:");String accessToken=new Scanner(System.in).next();updateStatus("发布微博测试!来自WeiboDemo!", accessToken);}/*** 测试能否正常访问HTTPS打头的网站,*/public static void testHttps(){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* @param url 要访问的URL* @param parameters URL后面“?”后面跟着的参数*/public static void postUrl(String url,String parameters){try{trustAllHttpsCertificates();//设置信任所有的http证书URLConnection conn = new URL(url).openConnection();conn.setDoOutput(true);// 这里是关键,表示我们要向链接里注入的参数OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());// 获得连接输出流 out.write(parameters);out.flush();out.close();// 到这里已经完成了,开始打印返回的HTML代码BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;while ((line = reader.readLine()) != null){System.out.println(line);}}catch (Exception e){e.printStackTrace();}}/*** 获取AccessToken* @param code 在授权页面返回的Code*/public static void getAccessToken(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发布一条微博* @param text 要发布的微博内容* @param accessToken 刚获取的AccessToken*/public static void updateStatus(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打头的网站会出现证书不信任相关错误,所以必须在访问前调用此方法)* @throws Exception*/private static void trustAllHttpsCertificates() throws Exception{javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];trustAllCerts[0] = new X509TrustManager(){@Overridepublic X509Certificate[] getAcceptedIssuers(){return null;}@Overridepublic void checkServerTrusted(X509Certificate[] arg0, String arg1)throws CertificateException{}@Overridepublic void checkClientTrusted(X509Certificate[] arg0, String arg1)throws CertificateException{}};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下载:
http://code.google.com/p/weibo4j
下载下来是个包含测试代码的整个SDK源代码,可以打包成jar文件方便调用,我这里打包成名为weibo4j-oauth2.jar的文件,注意先修改config.properties文件中的应用id、应用密码、回调页面。
2、在项目中导入以下6个包:
3、使用WindowsBuild新建一个Jframe窗体,大体布局如下:
三个按钮的事件分别如下:
public Date minTime;//最近一条微博的更新时间/*** 打开授权页面*/public void openUrl(){try{BareBonesBrowserLaunch.openURL(new Oauth().authorize("code"));}catch (WeiboException e){e.printStackTrace();}}/*** 获取当前登录用户的好友列表*/public void getFriends(){try{//获取好友列表accessToken=new Oauth().getAccessTokenByCode(textFieldCode.getText());Friendships friendships=new Friendships();friendships.setToken(accessToken.getAccessToken());for(User user:friendships.getFriendsByID(accessToken.getUid()).getUsers()){comboBox.addItem(user.getName());}}catch (WeiboException e){e.printStackTrace();}}/*** 开始监控关注用户的微博* @throws WeiboException */public void start(){try{System.out.println("开始监控");Timeline timeline=new Timeline();timeline.setToken(accessToken.getAccessToken());minTime = timeline.getUserTimelineByName(comboBox.getSelectedItem().toString()).getStatuses().get(0).getCreatedAt();Timer timer=new Timer();timer.schedule(new TimerTask(){@Overridepublic void run(){try{Timeline timeline=new Timeline();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=new Comments();comments.setToken(accessToken.getAccessToken());comments.createComment("哈哈,我来评论啦!", status.getId());JOptionPane.showMessageDialog(null, "恭喜,抢沙发成功!");}}catch (WeiboException e){e.printStackTrace();}}}, 0, 5000);//设置5秒钟刷新一次 }catch (WeiboException e){e.printStackTrace();}}
项目源代码下载地址:
http://download.csdn.net/detail/liuxianan612/4755895
整理后的SDK下载地址:
http://download.csdn.net/detail/liuxianan612/4755925
有问题可以联系:
微博:http://weibo.com/liuxianan
博客园:http://www.cnblogs.com/liuxianan/