分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
1这个豆瓣的api
https://api.douban.com/v2/book/isbn/:9787549208869
可以以json的形式返回书籍的所有信息
2最开始的时候是我自己写的用代码模拟http请求(参考的是http://www.jb51.net/article/47070.htm)
但不知道为何会有乱码问题 有乱码不怕 怕的就是并不是所有的中文都是乱码 例如在返回出版社信息的时候 长江出版社 这几个字 长江出版可以显示 但是那个社就是两个问号 头疼了好长时间
3 写这个的时候 还碰到一个问题 就是关于字符替换 replace 与replaceAll 后者使用的是正则表达式 而且把\变成/ 着实让我头疼了一下
最后的效果
import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.URIException;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpMethodParams;import org.apache.commons.httpclient.util.URIUtil;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.json.JSONException;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Iterator;import java.util.Map;/*** HTTP工具箱** @author leizhimin 2009-6-19 16:36:18* @author dlf 2014 12 20 00:19 */public final class HttpTookit { private static Log log = LogFactory.getLog(HttpTookit.class); /** * 执行一个HTTP GET请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param queryString 请求的查询参数,可以为null * @param charset 字符集 * @param pretty 是否美化 * @return 返回请求响应的HTML */ public static String doGet(String url, String queryString, String charset, boolean pretty) { StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); HttpMethod method = new GetMethod(url); try { if (queryString!=null) //对get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串 method.setQueryString(URIUtil.encodeQuery(queryString)); client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { if (pretty) response.append(line).append(System.getProperty("line.separator")); else response.append(line); } reader.close(); } } catch (URIException e) { log.error("执行HTTP Get请求时,编码查询字符串“" + queryString + "”发生异常!", e); } catch (IOException e) { log.error("执行HTTP Get请求" + url + "时,发生异常!", e); } finally { method.releaseConnection(); } return response.toString(); } /** * 执行一个HTTP POST请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param params 请求的查询参数,可以为null * @param charset 字符集 * @param pretty 是否美化 * @return 返回请求响应的HTML */ public static String doPost(String url, Map params, String charset, boolean pretty) { StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); HttpMethod method = new PostMethod(url); //设置Http Post数据 if (params != null) { HttpMethodParams p = new HttpMethodParams(); for (Map.Entry entry : params.entrySet()) { p.setParameter(entry.getKey(), entry.getValue()); } method.setParams(p); } try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { if (pretty) response.append(line).append(System.getProperty("line.separator")); else response.append(line); } reader.close(); } } catch (IOException e) { log.error("执行HTTP Post请求" + url + "时,发生异常!", e); } finally { method.releaseConnection(); } return response.toString(); } /*** * 将json转换为map * @param jsonString * @return * @throws JSONException */ public static Map toMap(String jsonString) throws JSONException { JSONObject jsonObject = new JSONObject(jsonString); Map result = new HashMap(); Iterator> iterator = jsonObject.keys(); String key = null; String value = null; while (iterator.hasNext()) { key = (String) iterator.next(); value = jsonObject.getString(key); result.put(key, value); } return result; } public static void main(String[] args) { String isbn="9787560612850"; String uri="https://api.douban.com/v2/book/isbn/:"+isbn; parse(uri); } public static void parse(String uri) { String y = doGet(uri, null, "UTF-8", true); // System.out.println(y); y=y.replace("\"", "'"); //将得到的json数据中的双引号改为单引号 y=y.replaceAll("\\\\","/"); //以下步骤将\改为/(url有用) y=y.replaceAll("//","/"); // System.out.println(y); Map map=null; try { map = toMap(y); } catch (JSONException e) { // TODO Auto-generated catch block System.out.println("解析错误"); e.printStackTrace(); } iteator(map); print(map); } /*** * 打印书的所有信息 * @param map */ public static void iteator(Map map) { Iterator> iter = map.entrySet().iterator(); String key,value; while(iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); key = (String)entry.getKey(); value = (String)entry.getValue(); System.out.println(key+" "+value); } } /*** * 打印书的关键信息 * @param map */ public static void print(Map map) { System.out.println("*********"); System.out.println("书名 "+map.get("title")); String author=map.get("author").toString(); author=author.replace("[", ""); author=author.replace("]", ""); author=author.replace("\"", ""); System.out.println("作者 "+author); System.out.println("原价格 "+map.get("price")); System.out.println("出版社 "+map.get("publisher")); System.out.println("出版日期 "+map.get("pubdate")); System.out.println("isbn "+map.get("isbn10")); Map map2=null; try { map2=toMap(map.get("images").toString().replace("\"", "'")); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("small images "+map2.get("small")); System.out.println("medium images "+map2.get("medium")); System.out.println("small large "+map2.get("large")); }}
//http://lavasoft.blog.51cto.com/62575/175911/
//http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html