通过ISBN或者豆瓣id来获取豆瓣的基本信息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_22797429/article/details/86547384

序言

本文主要是通过isbn或者豆瓣的id来获取豆瓣书籍的基本信息,豆瓣接口的url是已知的,通过传参的方式调用http接口从而查出基本信息。

postman调用已知接口

我们分别用isbn=9781783700608和id=26952493,分别调用这两个接口,来看看具体的数据,然后建自己的DTO。
例子:
    isbn: https://api.douban.com/v2/book/isbn/9781783700608
    doubanId: https://api.douban.com/v2/book/26952493

ISBN

postman通过传入isbn来获取豆瓣信息的返回如下:

{
    "rating": {
        "max": 10,
        "numRaters": 2,
        "average": "0.0",
        "min": 0
    },
    "subtitle": "",
    "author": [
        "Jenny Broom"
    ],
    "pubdate": "2014-9-1",
    "tags": [
        {
            "count": 1,
            "name": "图鉴",
            "title": "图鉴"
        }
    ],
    "origin_title": "",
    "image": "https://img1.doubanio.com/view/subject/m/public/s29274867.jpg",
    "binding": "Hardcover",
    "translator": [],
    "catalog": "",
    "pages": "112",
    "images": {
        "small": "https://img1.doubanio.com/view/subject/s/public/s29274867.jpg",
        "large": "https://img1.doubanio.com/view/subject/l/public/s29274867.jpg",
        "medium": "https://img1.doubanio.com/view/subject/m/public/s29274867.jpg"
    },
    "alt": "https://book.douban.com/subject/26952493/",
    "id": "26952493",
    "publisher": "Big Picture Press",
    "isbn10": "1783700602",
    "isbn13": "9781783700608",
    "title": "Animalium",
    "url": "https://api.douban.com/v2/book/26952493",
    "alt_title": "",
    "author_intro": "",
    "summary": "",
    "price": "GBP 20.00"
}

豆瓣Id

{
    "rating": {
        "max": 10,
        "numRaters": 2,
        "average": "0.0",
        "min": 0
    },
    "subtitle": "",
    "author": [
        "Jenny Broom"
    ],
    "pubdate": "2014-9-1",
    "tags": [
        {
            "count": 1,
            "name": "图鉴",
            "title": "图鉴"
        }
    ],
    "origin_title": "",
    "image": "https://img1.doubanio.com/view/subject/m/public/s29274867.jpg",
    "binding": "Hardcover",
    "translator": [],
    "catalog": "",
    "pages": "112",
    "images": {
        "small": "https://img1.doubanio.com/view/subject/s/public/s29274867.jpg",
        "large": "https://img1.doubanio.com/view/subject/l/public/s29274867.jpg",
        "medium": "https://img1.doubanio.com/view/subject/m/public/s29274867.jpg"
    },
    "alt": "https://book.douban.com/subject/26952493/",
    "id": "26952493",
    "publisher": "Big Picture Press",
    "isbn10": "1783700602",
    "isbn13": "9781783700608",
    "title": "Animalium",
    "url": "https://api.douban.com/v2/book/26952493",
    "alt_title": "",
    "author_intro": "",
    "summary": "",
    "price": "GBP 20.00"
}

可以通过调用两个接口可以发现,它们所返回的实体都是一样的,我们根据所返回的实体类型建立自己的douBanInfo用来存放实体。

代码实现(java)

我们写了两个静态方法getDouBanInfoByIsbn和getDouBanInfoByDbId分别用isbn和豆瓣id来获取豆瓣的基本信息。
getDouBanInfoByIsbn

public static DouBanInfo getDouBanInfoByIsbn(String isbn)  {
        String uri="https://api.douban.com/v2/book/isbn/"+isbn;
        String douBanResult = doGet(uri, null, "UTF-8", true);
        DouBanInfo douBanInfo = JSON.parseObject(douBanResult,DouBanInfo.class);
        return douBanInfo;
    }

getDouBanInfoByDbId

public static DouBanInfo getDouBanInfoByDbId(String douBanId)  {
        String uri="https://api.douban.com/v2/book/"+douBanId;
        String douBanResult = doGet(uri, null, "UTF-8", true);
        DouBanInfo douBanInfo = JSON.parseObject(douBanResult,DouBanInfo.class);
        return douBanInfo;
    }

其中doPost方法为:
doPost

public static String doPost(String url, Map<String, String> 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<String, String> 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();
    }

猜你喜欢

转载自blog.csdn.net/sinat_22797429/article/details/86547384
今日推荐