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

新浪微博应用开发之Java篇

4d19369797bbcb9571af2e9c452eaa20.png

2012年11月11日星期日

一、开发流程简介:

2、  在以下地址创建一个应用,假设创建一个桌面应用:

825ac00dd72f3705065490633d121c03.png

3、  进入管理中心,查看并记住应用ID和密码:

73720afb74fc67b4365e63b67150979c.png

b5c1cb09fc9b9e7fc1bc58b011329fe2.png

4、  在“应用中心-高级信息”设置回调页面(设置后一般需要半小时左右才能生效):

f0cc58e0fffa78a93bf4ff0b769b1cad.png

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());

}

}

访问授权页面:

f532c92b8585d4ee2552d26cff34cd13.png

授权成功:

97483a787b14c326e663e4e5052ef908.png

发布微博成功:

9c8d621fb4b6887727cc514468fccbec.png

控制台输出结果:

5bd6b707e080bfb5f1673143228d3b03.png

三、使用weibo4j-oauth2这个SDK做一个简单的抢沙发工具:

1、SDK下载:

下载下来是个包含测试代码的整个SDK源代码,可以打包成jar文件方便调用,我这里打包成名为weibo4j-oauth2.jar的文件,注意先修改config.properties文件中的应用id、应用密码、回调页面。

2、在项目中导入以下6个包:

2c69d654c8967dd3326f2173bf21cf03.png

3、使用WindowsBuild新建一个Jframe窗体,大体布局如下:

15c78f0b7783775d5b74285aeacd785c.png

三个按钮的事件分别如下:

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下载地址:

有问题可以联系:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flex java oracle_Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据...

一、建立Flex与Java交互的工程。本文中讲到的交互是利用Blazeds的,因为这个是免费的,呵呵,我是穷人。首先就是去下载Blazeds的压缩包,这个可以从官网或者CSDN、JavaEye上下到。解压缩这个包,将里面的Blazeds.war解压&a…

lfu算法实现java_LFU五种实现方式,从简单到复杂

前言最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊。这个月我估计都是中等和困难题,没有简单题了。幸好,力扣上有各种大牛给写题解。看着他们行云流水的代码,真的是羡慕不已。让我印象最深刻的就是人称 “甜姨”…

java控制台高级_K9s Kubernetes的高级控制台

K9s Kubernetes CLI,以个性化方式管理您的集群!参考:Why K9s?首先我们得面对现实——Kubernetes及其周边生态系统的运营方式正变得越来越复杂。集群管理需要大量工具加以配合。当我在集群之上进行日常运营时,和大家一样…

java缓存回收_java缓存应用 - 阿亮ing的个人空间 - OSCHINA - 中文开源技术交流社区...

缓存回收策略1.基于空间设置缓存的存储空间,超过容量限制按照一定的规则去移除。2.基于容量当缓存条数超过规定容量按照一定的规则去移除旧数据。3.基于时间(存活时间空闲时间)TTl(Time To Live):存活期,缓存数据最后更新时间到指定时间如果没有更新或创…

php 生成打印送货单,PHP输出PDF打印HTML5+CSS3打印格式控制

ERP系统进入尾声,各种送货单、退货单、合同、对账单等等一系列的东东排着队调打印格式。HTML5CSS3已经这样流行,然则眼下,基于CSS3的打印控制,居然还处于原始部落阶段,Chrome、Firefox、Edge等连简单的page都支持得不完…

备案php代码,备案查询API PHP代码

在线演示http://tool.ayangw.com/beian/?urlqq.com使用方法1.创建一个php文件&#xff0c;比如beian.php&#xff0c;将下方代码复制2.访问接口域名/beian.php?urlqq.comPHP代码<?php /*** 0en.cn*/error_reporting(0);$u $_GET[url];var_dump();if(!isset($u)){echo ?…

帝国cms php替换,帝国CMS内容关键字替换图片标签解决方法

1、在 e/class/userfun.php 里面增加//替换正文IMG里的ALT内容functionuser_imgalt($mid,$f,$isadd,$isq,$value,$cs){$title$_POST[title];$htmls$value;$pattern "/]>/";preg_match_all($pattern, $htmls, $matches);for($i0; $i<count($matches[0]); $i) {p…

php类的举例,用类来代替递归方法,用php举例_php _ 搞代码

问题&#xff1a;一个楼梯有n个台阶&#xff0c;每次上一个或两个台阶&#xff0c;共有多少种上法, 每种走法的步骤是什么样的&#xff1f;这个简单问题&#xff0c;我们通常的方法是写一个递归调用&#xff0c;简单明了。但是&#xff0c;这里通过类的叠加来实现&#xff0c;虽…

easyexcel安全扫描报php,easyExcel使用以及踩过的坑

easyExcel介绍:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都是…

用python做人脸识别的程序怎么做,10分钟学会使用python实现人脸识别(附源码)

前言今天&#xff0c;我们用Python实现简单的人脸识别技术&#xff01;Python里&#xff0c;简单的人脸识别有很多种方法可以实现&#xff0c;依赖于python胶水语言的特性&#xff0c;我们通过调用包可以快速准确的达成这一目的。这里介绍的是准确性比较高的一种。一、首先梳理…

matlab是那个国家,这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色,拍摄的时候反光比较少...

这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色&#xff0c;拍摄的时候反光比较少2016-08-22 0 0 0 暂无评分其他1积分下载如何获取积分&#xff1f;这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色&#xff0c;拍摄的…

oracle中12523,【Oracle】静态监听导致的ORA-12523错误

今天配置完共享服务器模式之后发现登录过程中报错ORA-12523&#xff0c;排查错误之后发现是静态监听惹的祸。本机之上有两个监听&#xff0c;一个静态监今天配置完共享服务器模式之后发现登录过程中报错ORA-12523&#xff0c;排查错误之后发现是静态监听惹的祸。本机之上有两个…

线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...

66.Oracle数据库SQL开发之 高级查询——使用线性回归函数线性回归函数可以用普通最小平方回归曲线拟合一组数值对。线性回归函数可用于聚合、串口或报表函数。如下图1&#xff1a;例如&#xff1a;storePDB1> selectprd_type_id,regr_avgx(amount,month) as avgx,regr_avgy(…

linux 源码目录结构,分析Android 源代码编译前后的目录结构

我们看没有编译前的项目目录大致的情况如下 &#xff1a;在树结构中我们可以了解的有如下一些信息分析&#xff1a;1. getSplashy 项目名称&#xff1b;2. src 项目程式&#xff1b;3. com 早…

linux vps 运行exe文件夹,在centos环境下运行.exe文件

首先要了解一下Wine&#xff1a;Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux&#xff0c;Mac OSX 及 BSD 等)上运行 Windows 应用的兼容层。Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和U…

linux服务器u盘启动项检测不到,将U盘设置为第一启动项之后却检测不到U盘怎么办?...

对于如何使用U盘装系统&#xff0c;想必看过小编之前介绍的朋友应该大致都清楚了吧?虽然说咱们使用U盘装系统的操作步骤还是比较简单的&#xff0c;但是却必须要满足一个条件&#xff0c;那便是将咱们的U盘设置为第一启动项&#xff0c;那么如何进行设置呢?这便需要在咱们win…

linux内核io源码,Linux Kernel do_io_submit()函数整数溢出漏洞

发布日期&#xff1a;2010-09-21更新日期&#xff1a;2010-09-27受影响系统&#xff1a;Linux kernel 2.6.x不受影响系统&#xff1a;Linux kernel 2.6.36-rc4描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: …

linux6无法启动iscsi服务,RHEL6下安装配置ISCSI服务器

1.安装所需软件:yum –y install scsi-target-utils iscsi-initiator-utils功能说明:scsi-target-utils&#xff1a;用来将 Linux 系统仿真成为 iSCSI target 的功能&#xff1b;iscsi-initiator-utils&#xff1a;挂载来自 target 的磁盘到 Linux 本机上。2.target的设定:----…

linux socat rpm,RabbitMQ系列(三)RabbitMQ Server的安装(基于Linux RPM)

提示&#xff1a;在Fedora和RHEL仓库中包含了RabbitMQ&#xff0c;但这些版本往往是滞后的且不再被支持&#xff0c;我们建议你使用PackageCloud或者Bintray的Yum仓库进行安装&#xff1b;RabbitMQ RPM包将需要sudo特权来安装和管理。在没有sudo的环境中&#xff0c;可以考虑使…

每天一个linux命令博客nano,11 个鲜为人知的 Linux 命令(1)

英文&#xff1a;Tecmint&#xff0c;编译&#xff1a;Linux中国linux.cn/article-2258-1.html如有好文章Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务。Linux命令和它们的转换对于Linux用户、Shell脚本程序员和管理员来说…