版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}