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,一经查实,立即删除!

相关文章

java 反射泛型方法_java基础之反射和泛型以及注解

java基础之反射和泛型以及注解泛型擦除泛型擦除: 泛型只在编译时期有效,编译后的字节码文件中不存在泛型信息。声明泛型集合,集合两端类型必须一致。类型也可以用包装类型,泛型的类型必须是引用类型,不能为基本类型。实…

java 16进制整数,Java将整数转换为十六进制整数

Im trying to convert a number from an integer into an another integer which, if printed in hex, would look the same as the original integer.For example:Convert 20 to 32 (which is 0x20)Convert 54 to 84 (which is 0x54)解决方案public static int convert(int n)…

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

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

java重定向cookie_response请求转发和重定向,cookie

一.response:响应对象 提供的方法: void addCookie(Cookie cookie);服务端向客户端增加一个cookie对象 void sendRedirect(String location) throws IOExcetion:页面跳转的一种方法 void setContentType(String type):设置服务端响应的编码 示例重定向: login.jsp—->che…

linux java 文件夹创建失败_Linux文件夹文件创建、删除

Linux删除文件夹命令linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字删除目录、文件…

python zip函数转制_Python zip函数及用法

zip() 函数是 Python 内置函数之一,它可以将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)“压缩”成一个 zip 对象。所谓“压缩”,其实就是将这些序列中对应位置的元素重新组合,生成一个个新的元组。和 Python 3.x …

python中sin函数在哪个模块中_python标准库math中sin函数的参数单位是角度吗_弧度 - math.h中的三角函数,参数是...

在数学和物理中,弧度是角的度量单位。它是由国际单位制导出的单位,单位缩写是rad。定义1:弧长等于半径的弧,其所对的圆心角为1弧度。(即两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于…

java jvm 加载_Jvm是如何加载Java类的?

前言我们知道Java语言的类型可以分为两大类:基本类型「primitive types」和引用类型「reference types」.对于Java的基本数据类型是Java虚拟机定义好的.至于另一大类「引用数据类型」, Java将其分为四种类型:类接口数组泛型参数由于「泛型参数」在编译时期会被擦除, 因此Java虚…

python查找文件内容_python自定义查找文件内容

#!/usr/bin/env python#coding:utf8#此脚本为查找递归目录下所有文件匹配的内容import os,sys,tabdef paths(path):list_pathos.walk(path)all_file[]for p,d,fl in list_path:for f in fl:pfileos.path.join(p,f)if os.path.isdir(pfile):paths(pfile)all_file.append(pfile)r…

derby mysql 同步_[Derby]数据库操作说明

1. 创建新数据库connect jdbc:derby:mydb;createtrue;ij> connect jdbc:derby:mydb;createtrue;ij>将在当前目录下建立数据库目录 mydb;如果已经存在数据库 mydb,则提示:警告 01J01:未创建数据库"mydb",而是建立到现有数据库…

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

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

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

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

java redis id生成器_基于redis的分布式ID生成器

项目地址基于redis的分布式ID生成器。准备首先,要知道redis的EVAL,EVALSHA命令:原理利用redis的lua脚本执行功能,在每个节点上通过lua脚本生成唯一ID。生成的ID是64位的:使用41 bit来存放时间,精确到毫秒&a…

Java自动切表_java_Mybatis自动创建表和更新表结构,最近有小伙伴问我mybatis有没有 - phpStudy...

Mybatis自动创建表和更新表结构最近有小伙伴问我mybatis有没有自动创建表结构的功能,因为他们之前一直使用hibernate用习惯了,理所当然的认为,在实体类上配置下注解或者写写映射文件,系统启动后就可以自动创建表。我只能很遗憾的告…

java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...

先看一段推理124:0111 1100  -124:1000 0100125:0111 1101  -125:1000 0011126:0111 1110  -126:1000 0010127:0111 1111  -127:1000 0001128:0 1000 0000 -128:1000 0000从上述过程对比可以看出:128是在127的基础上加1得到,但是会造成溢出(java中byte的大小为一个字…

java不同类间调用数组_请问:JAVA中两个类中的方法都需要调用另一个类的数组进行对数组的初始化和调用。...

匿名用户1级2013-09-14 回答import java.util.ArrayList;import java.util.Iterator;import java.util.List;/*** 测试类* author Administrator**/public class Test02 {public static void main(String[] args) {MovieStore movieStore new MovieStore();DVDManage.initDVD(…

java函数只有参数类不一样_java的函数参数传递

java中只有一种参数传递方式:传值;这点和c不一样,c中有传值和引用两种方式。虽然java只有传值这一种传递方式,但是根据参数类型的不同,函数对参数的影响也会不一样。可以这么说:形参是实参的一份拷贝&#…

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

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

java mvc中重复提交_SpringMVC之——防止重复提交表单的方法(一)

这篇博文介绍第一种方法:判断session或其他缓存中保存的token,这里以session为例,具体大家也可以自行扩展以其他的缓存实现。这种方式比较麻烦,每次在提交表单时都必须传入上次的token。而且当一个页面使用ajax时,多个…

三层加过的注释java_spring框架中三层架构相关的注解

做了这么多年的C,再去学Java,确实发现,语言都是相通的,即使是Java的那么多生态,理解起来也并不费劲Spring 框架目前还在学习中,处于 Tourist 阶段,目前只求会做,不求原理&#xff0c…