Baidu云盤API接口的使用使用說(shuō)明
www.educity.cn 發(fā)布者:mym_moon 來(lái)源:網(wǎng)友轉(zhuǎn)載
發(fā)布日期:2013年10月25日
文章評(píng)論
發(fā)表文章
這幾天很有興致的學(xué)習(xí)了百度云盤文件API接口的使用;初步是想做一個(gè)在線android應(yīng)用,應(yīng)用中的文檔是存放在百度云盤的。 主要是分一下幾個(gè)步驟: 1.注冊(cè)百度賬號(hào) 2.登錄百度開(kāi)發(fā)者中心 3.創(chuàng)建移動(dòng)應(yīng)用,獲取對(duì)應(yīng)的(API Key Secret Key) 4.開(kāi)通pcs API權(quán)限 5.獲取ACCESS_token(認(rèn)證編碼) 6.開(kāi)發(fā)應(yīng)用 注意: 開(kāi)通移動(dòng)應(yīng)用,獲取key 獲取token的時(shí)候我使用的安卓獲取的方式 通過(guò)我寫對(duì)應(yīng)api的例子我發(fā)現(xiàn),其實(shí)就兩種情況:一種是get方式提交數(shù)據(jù),另外一種是post方式提交數(shù)據(jù) 1.get方式提交數(shù)據(jù),我們用獲取云盤的信息為例: 獲取云盤信息前我們要知道,我們要準(zhǔn)備好什么數(shù)據(jù): 請(qǐng)求參數(shù): url: 標(biāo)明我們要訪問(wèn)的網(wǎng)址路徑 值固定問(wèn)"" method:標(biāo)明我們是請(qǐng)求云盤信息 值固定為"info" acceess_token:準(zhǔn)入標(biāo)識(shí) 值是我們自己申請(qǐng)的 接收返回參數(shù): quota:云盤總?cè)萘?br> used:云盤使用容量 request_id:該請(qǐng)求的表示,沒(méi)啥用 返回的一個(gè)json串如下格式:{"quota":123794882560, "used":83573494688,"request_id":2853739529} 我在做的時(shí)候你使用Gson工具將json串轉(zhuǎn)換到對(duì)應(yīng)的entity類中了 代碼如下: [html] /** * @param URLConnection conn通過(guò)get方式獲取StringBuffer * @return */ private StringBuffer getJsonString(URLConnection conn) { InputStreamReader isr = null; BufferedReader br = null; StringBuffer sb = null; try { isr = new InputStreamReader(conn.getInputStream(),"gb2312"); br = new BufferedReader(isr); String line = null; sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line); sb.append("\r\n"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(isr!=null) isr.close(); } catch (IOException e) { System.out.println("流關(guān)閉是異常"); e.printStackTrace(); } } return sb; } /** * @return * @throws Exception * 獲取云空間的信息 */ public CloudInfo getCloudInfo() throws Exception { URL u = new URL("?method=info&access_token=你申請(qǐng)的token的值"; URLConnection conn = u.openConnection();// 打開(kāi)網(wǎng)頁(yè)鏈接 // 獲取用戶云盤信息 String cloudJson = this.getJsonString(conn)。toString();
// 解析成對(duì)象 下面有這個(gè)實(shí)體對(duì)象的類 Gson gson = new Gson(); CloudInfo cloudInfo = gson.fromJson(cloudJson, CloudInfo.class); System.out.println("云盤信息:"+cloudInfo); return cloudInfo; } /** * @param URLConnection conn通過(guò)get方式獲取StringBuffer * @return */ private StringBuffer getJsonString(URLConnection conn) { InputStreamReader isr = null; BufferedReader br = null; StringBuffer sb = null; try { isr = new InputStreamReader(conn.getInputStream(),"gb2312"); br = new BufferedReader(isr); String line = null; sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line); sb.append("\r\n"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(isr!=null) isr.close(); } catch (IOException e) { System.out.println("流關(guān)閉是異常"); e.printStackTrace(); } } return sb; } /** * @return * @throws Exception * 獲取云空間的信息 */ public CloudInfo getCloudInfo() throws Exception { URL u = new URL("?method=info&access_token=你申請(qǐng)的token的值"; URLConnection conn = u.openConnection();// 打開(kāi)網(wǎng)頁(yè)鏈接 // 獲取用戶云盤信息 String cloudJson = this.getJsonString(conn)。toString(); // 解析成對(duì)象 下面有這個(gè)實(shí)體對(duì)象的類 Gson gson = new Gson(); CloudInfo cloudInfo = gson.fromJson(cloudJson, CloudInfo.class); System.out.println("云盤信息:"+cloudInfo); return cloudInfo; } [html] package com.entity; import java.lang.reflect.Type; /** * @author ydcun 獲取云空間的信息 例如: * {"quota":123794882560, 空間配額,單位為字節(jié) * "used":83573494688, 已使用空間大小 單位為字節(jié)。 * "request_id":2853739529} */ public class CloudInfo{ private Double quota; private Double used; private Double request_id; /** * @return the quota 空間配額,單位為字節(jié) */ public Double getQuota() { return quota; } /** * @param quota the quota to set 空間配額,單位為字節(jié) */ public void setQuota(Double quota) { this.quota = quota; } /** * @return the used 已使用空間大小 單位為字節(jié) */ public Double getused() { return used; } /** * @param used the used to set 已使用空間大小 單位為字節(jié) */ public void setused(Double used) { this.used = used; } /** * @return the request_id */ public Double getRequest_id() { return request_id; } /** * @param request_id the request_id to set */ public void setRequest_id(Double request_id) { this.request_id = request_id; } @Override public String toString() { return new StringBuffer()。append("空間容量:")。append(this.getQuota()/1024/1024)。append("M; 已用:")。append(this.getused()/1024/1024)。append("M; ")。toString(); } } package com.entity; import java.lang.reflect.Type; /** * @author ydcun 獲取云空間的信息 例如: * {"quota":123794882560, 空間配額,單位為字節(jié) * "used":83573494688, 已使用空間大小 單位為字節(jié)。 * "request_id":2853739529} */ public class CloudInfo{ private Double quota; private Double used; private Double request_id; /** * @return the quota 空間配額,單位為字節(jié) */ public Double getQuota() { return quota; } /** * @param quota the quota to set 空間配額,單位為字節(jié) */ public void setQuota(Double quota) { this.quota = quota; } /** * @return the used 已使用空間大小 單位為字節(jié) */ public Double getused() { return used; } /** * @param used the used to set 已使用空間大小 單位為字節(jié) */ public void setused(Double used) { this.used = used; } /** * @return the request_id */ public Double getRequest_id() { return request_id; } /** * @param request_id the request_id to set */ public void setRequest_id(Double request_id) { this.request_id = request_id; } @Override public String toString() { return new StringBuffer()。append("空間容量:")。append(this.getQuota()/1024/1024)。append("M; 已用:")。append(this.getused()/1024/1024)。append("M; ")。toString(); } }
2.通過(guò)post方式提交 我用上傳單個(gè)文件為例子: 同樣我們也先了解下上傳文件要參數(shù)設(shè)置: 請(qǐng)求參數(shù): url: 標(biāo)明我們要訪問(wèn)的網(wǎng)址路徑 值固定問(wèn)"" method:標(biāo)明我們是請(qǐng)求云盤信息 值固定為"upload" acceess_token:準(zhǔn)入標(biāo)識(shí) 值是我們自己申請(qǐng)的 path:是我們要上傳到云盤的那個(gè)路徑下 如/apps/myBaiduCloud/ myBaiduCloud是我們的應(yīng)用名稱(當(dāng)你獲取koten后就會(huì)自動(dòng)生成以你應(yīng)用名稱為名的文件夾) file:這個(gè)就是我們要上傳的文件了(要求用post方式上傳) ondup:可選參數(shù),標(biāo)識(shí)當(dāng)有重名的文件的時(shí)候處理方式具體見(jiàn)api 接收返回參數(shù): 返回的也是json串, path:為我們上傳的文件保存的全路徑 size:文件的大小有多少字節(jié) ctime/mtime:文件的創(chuàng)建修改時(shí)間 其他參數(shù)介紹點(diǎn)小標(biāo)題去api中查看 { "path" : "/apps/album/README.md" "size" : 372121, "ctime" : 1234567890, "mtime" : 1234567890, "md5" : "cb123afcc12453543ef", "fs_id" : 12345, "request_id":4043312669 } 我在做的時(shí)候也是將其封裝到實(shí)體類中了,這里和上面一樣不詳述,我們重點(diǎn)看下提交文件是怎么提交的代碼如下: [java] /** * @param path 云盤存放路徑 * @param name 要上傳的文件 * @return * @throws Exception */ public FileBase uploadFile(String path,File file) throws Exception{ //模擬文件 String fileName="README.md"; file = new File(fileName); path="%2fapps%2fmybaidu%2f"; // 我用的是url編碼過(guò)源碼為:-> "/apps/mybaidu/ /" //將需要url傳值的參數(shù)和url組裝起來(lái) String u =""+path+file.getName()+"&method=upload&access_token=你自己申請(qǐng)的token值"; PostMethod filePost = new PostMethod(u); //post提交的參數(shù) Part[] parts = {new FilePart(fileName,file)}; //設(shè)置多媒體參數(shù),作用類似form表單中的enctype="multipart/form-data" filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); HttpClient clients = new HttpClient(); //響應(yīng)代碼 int status = clients.executeMethod(filePost); System.out.println("成功上傳"+path+fileName); BufferedReader buReader = new BufferedReader(new InputStreamReader(filePost.getResponseBodyAsStream(),"utf-8")); StringBuffer sb = new StringBuffer(); String line; while((line=buReader.readLine())!=null){ sb.append(line); } buReader.close(); // 解析成對(duì)象 Gson gson = new Gson(); FileBase cloudInfo = gson.fromJson(sb.toString(), FileBase.class); return cloudInfo; } /** * @param path 云盤存放路徑 * @param name 要上傳的文件 * @return * @throws Exception */ public FileBase uploadFile(String path,File file) throws Exception{ //模擬文件 String fileName="README.md"; file = new File(fileName); path="%2fapps%2fmybaidu%2f"; // 我用的是url編碼過(guò)源碼為:-> "/apps/mybaidu/ /" //將需要url傳值的參數(shù)和url組裝起來(lái) String u =""+path+file.getName()+"&method=upload&access_token=你自己申請(qǐng)的token值"; PostMethod filePost = new PostMethod(u); //post提交的參數(shù) Part[] parts = {new FilePart(fileName,file)}; //設(shè)置多媒體參數(shù),作用類似form表單中的enctype="multipart/form-data" filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); HttpClient clients = new HttpClient(); //響應(yīng)代碼 int status = clients.executeMethod(filePost); System.out.println("成功上傳"+path+fileName); BufferedReader buReader = new BufferedReader(new InputStreamReader(filePost.getResponseBodyAsStream(),"utf-8")); StringBuffer sb = new StringBuffer(); String line; while((line=buReader.readLine())!=null){ sb.append(line); } buReader.close(); // 解析成對(duì)象 Gson gson = new Gson(); FileBase cloudInfo = gson.fromJson(sb.toString(), FileBase.class); return cloudInfo; } 上面代碼成功后我們就會(huì)在/apps/mybaidu/目錄下找到README.md文件 commons-codec-1.3.jar commons- commons-logging.jar gson-2.2.1.jar jsoup-1.6.3.jar 其他的api怎么用百度給了一個(gè)很好的演示平臺(tái):
|