Java使用新浪微博API开发微博应用的基本方法
新浪微博api现在运用比较广泛,做一个完整的开发流程demo
1、第一步注册,就不多说了,注册帐号以及成为开发者帐号,这步操作不会的话请你马上砸掉电脑拔掉网线回家种田。
2、第二步创建应用,开发者帐号创建好了,打开新浪微博开发平台: http://open.weibo.com
上面菜单栏点击最后一个 管理中心
如果是web的应用的话选择创建网站接入的应用,然后根据新浪微博的要求balabalabala自己去搞定
应用创建完毕。点击应用跳转页面,点击查看应用参数,可以看到应用的相关参数,这些参数将会在第四步用到。
3、第三步下载sdk,回到顶部的菜单栏,点击 文档 ,再点击左边菜单栏sdk,选择java sdk,然后balabala下载,这步操作有问题也请回家种田。
所谓的sdk并非是sdk(个人觉得名称有点误导),而是一个可运行的工程,下载完毕之后解压 ,并导入到eclipse,可以看到两个目录 src和example
src是新浪微博的部分
example是实例,接口的demo
4、第四步配置参数,找到src目录下的config.properties
前三个参数需要自己配置 为第二步里说过的应用参数里的参数
后面的都是默认的不需要改
前三个参数配置如下
client_id为app key
client_sercret为app secret
redirect_uri为 oauth2.0授权的回调url 应用信息>高级信息>oauth2.0 授权设置下面的授权回调页 这是一个你自己填写的url 指向的是你自己服务器 当然在开发阶段我们可以使用任何url 只要能够让我们了解oauth授权的流程就好了 这里我们就输入一个http://www.baidu.com 取消授权回调页也是如此 注意这里的url的字符串必须是一致
5、第五步获取accesstoken,正常情况下accesstoken的获取是需要通过oauth2.0认证的,但是为了更简单我先说一种简单的方法。后面再讲oauth2.0
还是选择最上面的菜单栏 文档>api>api测试工具
选择创建的应用 点击获取accesstoken 下面的文本框里就是我们要的accesstoken
6、第六步先做一个接口实例
去微博api里随便找一个已有权限的接口,
我随便找了一个 获取用户发布的微博 statuses/user_timeline 做测试用的
点击这个接口查看这个接口详情,可以查看到接口的每个传入参数以及返回参数 这个无需多说。
不使用任何sdk实现oauth授权并实现简单的发布微博功能:
创建一个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";//你的应用id static 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"); //第二步:获取accesstoken system.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() { @override public x509certificate[] getacceptedissuers() { return null; } @override public void checkservertrusted(x509certificate[] arg0, string arg1) throws certificateexception {} @override public 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()); } }
访问授权页面:
授权成功:
发布微博成功:
控制台输出结果:
推荐阅读