如何调用豆瓣API
0赞最近在自己的网页中希望可以输入书籍的ISBN号就可以自动补全书籍的所有信息,人工输入工作量太大,就选择了调用豆瓣的API获得数据填写到表单中。做了两天才做好,网上资料比较少,于是晒出自己这两天做的一些东西,希望可以帮助到需要的人,注意:APIV1.0和2.0是有区别的。在下面会讲到。
1. JS调用
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML xmlns="http://www.w3.org/1999/xhtml"> <HEAD> <TITLE></TITLE> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <style> body {padding:0;margin: 0;background: #FEFEFE;} body,td,th { font: 12px Arial, Helvetica, sans-serif; line-height: 150%; } span.title { margin:5px; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript" src="http://www.douban.com/js/api.js?v=2"></script> <script type="text/javascript" src="http://www.douban.com/js/api-parser.js?v=1"></script> </HEAD> <BODY> body </BODY> <script> DOUBAN.apikey = '00fa6c0654689a0202ef4412fd39ce06' DOUBAN.getISBNBook({ isbn:'9787543632608', callback:function(book1){ var subj = DOUBAN.parseSubject(book1) var tl = subj.title ? subj.title : ""; var author = subj.author ? subj.author : ""; var tmp = "<img src="+subj.link.image+" style='margin:10px;float:left'>"; tmp += "<div>Title : <a href="+subj.link.alternate+" target='_blank'>"+tl+"</a></div>"; if (subj.attribute.author) tmp += "<div>Authors : "+(subj.attribute.author.join(' / '))+"</div>"; if (subj.attribute.isbn13) tmp += "<div>ISBN : "+(subj.attribute.isbn13.join(' / '))+"</div>"; if (subj.attribute.price) tmp += "<div>Price : "+(subj.attribute.price.join(' <br/> '))+"</div>"; if (subj.attribute.pages) tmp += "<div>Pages : "+(subj.attribute.pages.join(' / '))+"</div>"; if (subj.attribute.publisher) tmp += "<div>Publisher : "+(subj.attribute.publisher.join(' <br/> '))+"</div>"; if (subj.attribute.pubdate) tmp += "<div>Pubdate : "+(subj.attribute.pubdate.join(' / '))+"</div>"; if (subj.rating.average) tmp +="<div>Rating: "+subj.rating.average+" / "+subj.rating.numRaters+decodeURI("%E4%BA%BA")+ "</div>" tmp += "<p>"+(subj.summary ? subj.summary : "")+"</p>"; document.body.innerHTML = tmp; } }) </script> </HTML> |
|
<script type="text/javascript"> $.getJSON("http://api.douban.com/book/subject/1220562?alt=xd&callback=?", function(book) { var subj = DOUBAN.parseSubject(book); var tl = subj.title ? subj.title : ""; var author = subj.author ? subj.author : ""; var tmp = "<img src="+subj.link.image+" style='margin:10px;float:left'>"; tmp += "<div>Title : <a href="+subj.link.alternate+" target='_blank'>"+tl+"</a></div>"; if (subj.attribute.author) tmp += "<div>Authors : "+(subj.attribute.author.join(' / '))+"</div>"; if (subj.attribute.isbn13) tmp += "<div>ISBN : "+(subj.attribute.isbn13.join(' / '))+"</div>"; if (subj.attribute.price) tmp += "<div>Price : "+(subj.attribute.price.join(' <br/> '))+"</div>"; if (subj.attribute.pages) tmp += "<div>Pages : "+(subj.attribute.pages.join(' / '))+"</div>"; if (subj.attribute.publisher) tmp += "<div>Publisher : "+(subj.attribute.publisher.join(' <br/> '))+"</div>"; if (subj.attribute.pubdate) tmp += "<div>Pubdate : "+(subj.attribute.pubdate.join(' / '))+"</div>"; if (subj.rating.average) tmp +="<div>Rating: "+subj.rating.average+" / "+subj.rating.numRaters+decodeURI("%E4%BA%BA")+ "</div>" tmp += "<p>"+(subj.summary ? subj.summary : "")+"</p>"; document.body.innerHTML = tmp; }); </script> |
|
<script type="text/javascript"> $.getJSON("https://api.douban.com/v2/book/1220562?alt=xd&callback=?", function(book) { var title = book.title ? book.title : ""; var tmp = "<img src="+book.image+" style='margin:10px;float:left'>"; tmp += "<div>Tiktle : <a href="+book.alt+" target='_blank'>"+title+"</a></div>"; if (book.author) tmp += "<div>Authors : "+book.author+"</div>"; if (book.pubdate) tmp += "<div>Pubdate : "+book.pubdate+"</div>"; if (book.isbn13) tmp += "<div>ISBN : "+book.isbn13+"</div>"; if (book.price) tmp += "<div>Price : "+book.price+"</div>"; if (book.pages) tmp += "<div>Pages : "+book.pages+"</div>"; if (book.publisher) tmp += "<div>Publisher : "+book.publisher+"</div>"; if (book.rating.average) tmp +="<div>Rating: "+book.rating.average+" / "+book.rating.numRaters+decodeURI("%E4%BA%BA")+ "</div>" tmp += "<p>"+(book.summary ? book.summary : "")+"</p>"; document.body.innerHTML = tmp; }); </script> |
关于JSON格式,这个是在网上看到阮一峰写的博客的,写的很好,一下子就理解了。
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(", ")分隔。
2) 映射用冒号(": ")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
上面四条规则,就是Json格式的所有内容。
