下载好源码,在eclipse中布署后。(其中详细的请查看源码)
https://api.diandian.com/oauth/authorize?client_id=uGv2iH1ONw&response_type=code&scope=read,write
然后输入帐号和密码之后,点击确定,会在brower url中出现:
http://127.0.0.1?code=jACgLB
其中这个code (jACgLB)非常重要.
修改里面的testDDClient代码,
如下所示:
//数据库操作类 DBConndb = new DBConn(); DDClient dd = newDDClient(DDAPIConstants.APP_KEY, DDAPIConstants.APP_SECRET, DDAPIConstants.REDIRECT_URI); dd.setDdHttpTools(newHttpsTools()); // dd.initAccessTokenByPassword(DDAPIConstants.USER_NAME,DDAPIConstants.USER_PASSWORD); //第一次运行的时候才会用到,后面就不会用到了 // if(mark){ // dd.initAccessTokenByCode("jACgLB"); // Token token = dd.getToken(); // System.out.println(token.getAccessToken()); // // dd.refreshToken(); // Token token2 = dd.getToken(); // //System.out.println(token2.getAccessToken()); // //存起来 // db.saveToDb(token2); // // mark = false; // } // else{ Token token3 = db.getLastRow(); dd.setToken(token3); System.out.println(token3); // String[] scope = token3.getScope(); // System.out.println(scope[0]); dd.refreshToken(); Token token4 = dd.getToken(); db.saveToDb(token4); // }
其中DBConn中我写的DB数据库处理类,它无非用了两件事情,第一是保存最新的 Token相关属性,第二件事取出最新的Token相关属性。
package com.diandian.api.sdk.java.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.diandian.api.sdk.Token; publicclass DBConn { publicConnectionconn =null; /** * 在测试类中进行测试 * @param args */ publicstaticvoidmain(String[] args) { //saveToDb(); } publicConnection getConnection(){ try{ Class.forName("com.mysql.jdbc.Driver"); conn =DriverManager.getConnection( "jdbc:mysql://localhost:3306/policedb?useUnicode=true&characterEncoding=UTF8", "root","123"); }catch(Exceptionevt){ evt.printStackTrace(); } returnconn; } /** * 插入至数据库 * @paramtoken */ publicvoidsaveToDb( Token token) { try{ String insertSQL ="insert into token_table(access_token, refresh_token,token_type,expires_in," + "last_update_time,scope) values(?,?,?,?,?,?)"; PreparedStatement ps = getConnection().prepareStatement(insertSQL); ps.setString(1,token.getAccessToken()); ps.setString(2,token.getRefreshToken()); ps.setString(3,token.getTokenType()); ps.setString(4, String.valueOf(token.getExpiresIn())); ps.setString(5, String.valueOf(token.getLastUpdateTime())); String[] scope = token.getScope(); //取数组第一条数据放入数据库中 ps.setString(6, scope[0]); ps.executeUpdate(); }catch(Exceptionevt){ evt.printStackTrace(); } } /** * 取数据库最后一条数据的内容 */ public TokengetLastRow(){ Token token =newToken(); try{ //取数据库最后一条数据的内容 select top 1 ID from [yourtable]order by ID desc String selectSQL ="select * from token_table order by id desc limit 1 "; PreparedStatement ps =getConnection().prepareStatement(selectSQL); ResultSet resultSet =ps.executeQuery(); //如果有记录的话 if(resultSet.next()){ token.setAccessToken(resultSet.getString("access_token")); token.setRefreshToken(resultSet.getString("refresh_token")); token.setExpiresIn(Long.parseLong(resultSet.getString("expires_in"))); token.setTokenType(resultSet.getString("token_type")); String firstScope = resultSet.getString("scope"); String[] scope =newString[1]; scope[0] =firstScope; //组装数组数据 token.setScope(scope); } }catch(Exceptionevt){ evt.printStackTrace(); } return token; } }
测试代码如下所示:
public void testGet() { TagView tagView = newDDClientInvoker(getClient(),newDefaultJsonParser()).getMyTags(); DDClientInvoker ddClientInvoker = newDDClientInvoker(getClient(),newDefaultJsonParser()); System.out.println(ddClientInvoker.getUserInfo()); //发布文字 //ddClientInvoker.postText("******************","1", "it", "slug", "it的世界", "引导世界潮流!"); //ddClientInvoker.postText("*******************", "2","it", "slug2", "phone5", "phone5引导世界潮流!"); //slug为自定义链接地址,不可重复,否则会报错 //错误如下所示: /*** code=400000,msg=你输入的自定义链接地址已被占用,请重新输入 **/ //发布照片 ddClientInvoker.postPhoto("*******************","1", "it","slug3", "这个一点通过JAVA API 方式上传的图片", "F:\\截图\\background.png"); //如果操作过快,在它的时间间隔内操作的话,会报如下问题: /** [code=400000, msg=操作太快啦,点点有点儿跟不上,稍等稍等一下 :)] **/ //得到博客名 //*****.diandian.com 这个是我的名字 System.out.println(tagView.toString()); }