API知识-1

1.先介绍一个通过ISBN获取图书信息的网站:

https://api.douban.com/v2/book/isbn/:9787111128069

9787111128069是书号,通过这个链接可以获取图书信息json格式

2.通过java实现获取json信息,import net.sf.json.JSONObject;需要下载一个包

这是聚合数据:(但不是根据书号提取信息,而是根据大类提取信息)key需要到聚合数据厂商申请

import  java.io.BufferedReader;
import  java.io.DataOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.io.UnsupportedEncodingException;
import  java.net.HttpURLConnection;
import  java.net.URL;
import  java.net.URLEncoder;
import  java.util.HashMap;
import  java.util.Map;
 
import  net.sf.json.JSONObject;
 
/**
*图书电商数据调用示例代码 - 聚合数据
*在线接口文档:http://www.juhe.cn/docs/50
**/
 
public  class  JuheDemo {
     public  static  final  String DEF_CHATSET =  "UTF-8" ;
     public  static  final  int  DEF_CONN_TIMEOUT =  30000 ;
     public  static  final  int  DEF_READ_TIMEOUT =  30000 ;
     public  static  String userAgent =   "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36" ;
 
     //配置您申请的KEY
     public  static  final  String APPKEY = "*************************" ;
 
     //1.图书分类目录
     public  static  void  getRequest1(){
         String result = null ;
         String url = "http://apis.juhe.cn/goodbook/catalog" ;//请求接口地址
         Map params =  new  HashMap(); //请求参数
             params.put( "key" ,APPKEY); //应用APPKEY(应用详细页查询)
             params.put( "dtype" , "" ); //返回数据的格式,xml或json,默认json
 
         try  {
             result =net(url, params,  "GET" );
             JSONObject object = JSONObject.fromObject(result);
             if (object.getInt( "error_code" )== 0 ){
                 System.out.println(object.get( "result" ));
             } else {
                 System.out.println(object.get( "error_code" )+ ":" +object.get( "reason" ));
             }
         catch  (Exception e) {
             e.printStackTrace();
         }
     }
 
     //2.图书内容
     public  static  void  getRequest2(){
         String result = null ;
         String url = "http://apis.juhe.cn/goodbook/query" ;//请求接口地址
         Map params =  new  HashMap(); //请求参数
             params.put( "key" ,APPKEY); //应用APPKEY(应用详细页查询)
             params.put( "catalog_id" , "" ); //目录编号
             params.put( "pn" , "" ); //数据返回起始
             params.put( "rn" , "" ); //数据返回条数,最大30
             params.put( "dtype" , "" ); //返回数据的格式,xml或json,默认json
 
         try  {
             result =net(url, params,  "GET" );
             JSONObject object = JSONObject.fromObject(result);
             if (object.getInt( "error_code" )== 0 ){
                 System.out.println(object.get( "result" ));
             } else {
                 System.out.println(object.get( "error_code" )+ ":" +object.get( "reason" ));
             }
         catch  (Exception e) {
             e.printStackTrace();
         }
     }
 
 
 
     public  static  void  main(String[] args) {
       
      getRequest2();
 
     }
 
     /**
      *
      * @param strUrl 请求地址
      * @param params 请求参数
      * @param method 请求方法
      * @return  网络请求字符串
      * @throws Exception
      */
     public  static  String net(String strUrl, Map params,String method)  throws  Exception {
         HttpURLConnection conn =  null ;
         BufferedReader reader =  null ;
         String rs =  null ;
         try  {
             StringBuffer sb =  new  StringBuffer();
             if (method== null  || method.equals( "GET" )){
                 strUrl = strUrl+ "?" +urlencode(params);
             }
             URL url =  new  URL(strUrl);
             conn = (HttpURLConnection) url.openConnection();
             if (method== null  || method.equals( "GET" )){
                 conn.setRequestMethod( "GET" );
             } else {
                 conn.setRequestMethod( "POST" );
                 conn.setDoOutput( true );
             }
             conn.setRequestProperty( "User-agent" , userAgent);
             conn.setUseCaches( false );
             conn.setConnectTimeout(DEF_CONN_TIMEOUT);
             conn.setReadTimeout(DEF_READ_TIMEOUT);
             conn.setInstanceFollowRedirects( false );
             conn.connect();
             if  (params!=  null  && method.equals( "POST" )) {
                 try  {
                     DataOutputStream out =  new  DataOutputStream(conn.getOutputStream());
                         out.writeBytes(urlencode(params));
                 catch  (Exception e) {
                     // TODO: handle exception
                 }
             }
             InputStream is = conn.getInputStream();
             reader =  new  BufferedReader( new  InputStreamReader(is, DEF_CHATSET));
             String strRead =  null ;
             while  ((strRead = reader.readLine()) !=  null ) {
                 sb.append(strRead);
             }
             rs = sb.toString();
         catch  (IOException e) {
             e.printStackTrace();
         finally  {
             if  (reader !=  null ) {
                 reader.close();
             }
             if  (conn !=  null ) {
                 conn.disconnect();
             }
         }
         return  rs;
     }
 
     //将map型转为请求参数型
     public  static  String urlencode(Map<String,Object>data) {
         StringBuilder sb =  new  StringBuilder();
         for  (Map.Entry i : data.entrySet()) {
             try  {
                 sb.append(i.getKey()).append( "=" ).append(URLEncoder.encode(i.getValue()+ "" , "UTF-8" )).append( "&" );
             catch  (UnsupportedEncodingException e) {
                 e.printStackTrace();
             }
         }
         return  sb.toString();
     }
}



猜你喜欢

转载自blog.csdn.net/liheao/article/details/76188212