新浪微博应用开发之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下载地址:

有问题可以联系:

java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇相关推荐

  1. 【新手入门篇】新浪微博应用开发之Java入门篇

    新浪微博应用开发之Java篇 2012年11月11日星期日 一.开发流程简介: 1.  访问http://open.weibo.com/注册成为开发者 2.  在以下地址创建一个应用,假设创建一个桌面 ...

  2. 新浪微博应用开发之Java入门篇

    新浪微博应用开发之Java篇 2016-10-30 一.开发流程简介: 1.  访问http://open.weibo.com/注册成为开发者 2.  在以下地址创建一个应用,假设创建一个桌面应用: ...

  3. 新浪微博客户端开发之OAuth认证篇

    新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程,我就随便找了一 ...

  4. java微博开发_利用java语言在eclipse下实现在新浪微博开发平台发微博(转)

    0    INFO  [2012-06-08 11:00:53]  code: xxxxxxxxxxxxxxxxxx(code的值) 360  DEBUG [2012-06-08 11:00:53]  ...

  5. 新浪微博Android客户端开发之OAuth认证篇

    新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程,我就随便找了一 ...

  6. 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者

    原标题:从零基础学Java成为一个专业的java web 开发者 "我怎么才能成为一个Java Web开发者?"对于这个问题,答案其实并不简单.成为一个Java Web开发人员包括 ...

  7. 新浪微博客户端开发之adapter

    新浪微博客户端开发之adapter 2013年11月23日 新浪微博客户端系列博客记录 之前获取首页微博列表还没有介绍adapter,关于adapter可以分出来一块来讲,用过ListView的童鞋们 ...

  8. koa+mysql+vue+socket.io全栈开发之web api篇

    原文地址:koa+mysql+vue+socket.io全栈开发之web api篇 目标是建立一个 web QQ的项目,使用的技术栈如下: 后端是基于koa2 的 web api 服务层,提供curd ...

  9. 电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分

    电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分,是电影天堂APP项目开发课程的第一篇章,讲解使用requests和bs4库,爬取和解析电影天堂网站数据,并讲数据保存到SQLite数 ...

最新文章

  1. leetcode968. 监控二叉树(dfs)
  2. SonarQube启动报错:WrapperSimpleApp: Encountered an error running main: java.nio.file.AccessDeniedExcepti
  3. 6.边缘检测:梯度——边缘检测、导数与边缘、什么是梯度_2
  4. Android开发(22)--seekBar采用handler消息处理操作
  5. python和java哪个好找工作-Python和java哪个就业前景好些?
  6. 年底了,整理了一些Android面试题给大家
  7. 在三层交换上配置ciscoVTP实验
  8. 记,当找不到图片时,显示默认图片
  9. 晨读-如何打造出有效的“人脉关系”
  10. Internet Download Manager has been registered withafake Serial Number
  11. 半导体器件物理【6】固体量子——各种电子有效质量 + 状态密度函数
  12. while在Java用法_while和do-while的使用方法
  13. 180417 马克飞象使用帮助
  14. 七参数/六参数坐标转换(小角度)-- 公共点间接平差
  15. 离职原因该怎么说才比较好 ?
  16. svn update 时报错 Node remains in conflict 和解决方法
  17. 高数篇:01函数的中值定理
  18. 计量经济学 知识点汇总 期末复习用
  19. 总结的人工智能领域论文搜索链接,大部分可用。
  20. anaconda完全卸载方法

热门文章

  1. java api项目配置统一的错误返回json提示
  2. Android NDK--自己编写调用JNI
  3. c char转int_c/c++基础之sizeof用法
  4. win10升级后chrome碰到对话框就卡死
  5. impdp导入dmp文件ORA-39088: 文件名不能包含路径说明ORA-39001: 参数值无效ORA-39000: 转储文件说明错误
  6. python csv模块用法_python使用csv模块如何将数据存放在一张表的不同行?
  7. [转载] 1022 D进制的A+B (20分)【java题解】【80ms】
  8. Linux允许61440端口,释放对某端口的占用
  9. js手机号中间四位_11位手机号码隐藏中间四位数,学会Substitute函数一键搞定!...
  10. lvs负载均衡—NAT模式