黑马程序员技术交流社区
标题:
如何使用豆瓣网的API
[打印本页]
作者:
王晨
时间:
2012-12-14 22:04
标题:
如何使用豆瓣网的API
本帖最后由 刪除記忆ご 于 2012-12-16 10:43 编辑
做关于图书管理的小网站,我想从豆瓣网上获取某些书的信息或者用户对某些书的评价等等,听说要使用API,但是如何实现呢?麻烦说的详细一些,我看了有一些文档没实现成功!!!
作者:
孙辉辉
时间:
2012-12-14 22:56
做图书类的网站的时候调用豆瓣的api还是很方便的,可以很方便的获得图书的信息,评价等,但是有访问次数限制。简单的可以参考一下豆瓣官方给出的帮助文件,地址:http://www.douban.com/service/apidoc/guide 例如这使用API获得ID为1220562的书的信息, 请求的urlhttp://api.douban.com/book/subject/1220562?apikey={yourkeyapi},此时豆瓣将会返回一个XML文档
<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
xmlns:gd="http://schemas.google.com/g/2005"
xmlns:opensearch="http://a9.com/-/spec/opensearchrss/1.0/"
xmlns:db="http://www.douban.com/xmlns/">
<category scheme="http://www.douban.com/2007#kind"
term="http://www.douban.com/2007#book" />
<db:tag count="20" name="片山恭一" />
<db:tag count="14" name="日本" />
<db:tag count="10" name="小说" />
<db:tag count="8" name="日本文学" />
<db:tag count="4" name="爱情" />
<title>满月之夜白鲸现</title>
<author>
<name>(日)片山恭一</name>
</author>
<content>
冷静地想一想吧!公寓的一个房间里只有两上人,连被褥都铺好了,理应是犯
错误的时候,我为什么却这么拘谨?一直胆小的毛病又犯了。事到如今,不要
说上床,就连接吻也还差得很远。这就是横亘在男人和女人之间的又深又暗的
河流吗?
如果有可能,我希望把手伸进她的心里,把她内心所有的东西都掏出来。她对
我究竟是一种什么感觉呢?我在她的心昊确实占有一席之地吗?抑或只是她生
命中的匆匆过客?
</content>
<link rel="self" />
<link rel="alternate" />
<link rel="image" />
<db:attribute name="author">(日)片山恭一</db:attribute>
<db:attribute name="isbn10">7543632608</db:attribute>
<db:attribute name="isbn13">9787543632608</db:attribute>
<db:attribute name="pages">180</db:attribute>
<db:attribute name="tranlator">豫人</db:attribute>
<db:attribute name="price">18.00</db:attribute>
<db:attribute name="publisher">青岛出版社</db:attribute>
<db:attribute name="binding">平装(无盘)</db:attribute>
<db:attribute name="author-intro">
片山恭一,1959年生于日本爱媛县,九州大学农学系农业经济学专业毕业。
学生时代通读了包括夏目漱石和大江健三郎在内的日本近现代文学全集,
同时读了笛卡尔、莱布尼茨到结构主义的欧洲近现代哲学。也读了马克思。
学士论文写的是马克思,硕士论文写的是恩格斯。二十二三岁开始创作小说。
代表作有《在世界中心呼唤爱》、《世界在你不知道的地方运转》、《气息》、
《别相信约翰·列侬》、《满月之夜白鲸现》、《空镜头》以及新作
《倘若我在彼岸》、《雨天的海豚们》等。
</db:attribute>
<id>http://api.douban.com/book/subject/1220562</id>
<gd:rating min="1" numRaters="39" average="3.69" max="5" />
</entry>
复制代码
通过写一个转换xml的类来处理信息并将数据存入数据库即可。
给一个用例
public class xml
{
public xml()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public books infobook(string xmldetail)
{
books books = new books();
XmlDocument xml = new XmlDocument();
xml.LoadXml(xmldetail);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("db", "http://www.w3.org/2005/Atom");
XmlElement root = xml.DocumentElement;
XmlNodeList nodes = root.SelectNodes("/db:entry", nsmgr);
// XmlNodeList nodes = xml.SelectNodes("/feed/entry");
foreach (XmlNode nodeData in nodes)
{
foreach (XmlNode childnode in nodeData.ChildNodes)
{
string str = childnode.Name;
switch (str)
{
case "title":
books.Title = childnode.InnerText;
break;
case "link":
if (childnode.Attributes[1].Value == "image")
{
//把小图换成大图
string s = childnode.Attributes[0].Value;
s = s.Replace("spic", "mpic");
books.Image = s;
}
break;
case "summary":
books.Summary = childnode.InnerText;
break;
case "db:attribute":
{
switch (childnode.Attributes[0].Value)
{
case "isbn13":
books.Isbn = childnode.InnerText;
break;
case "pages":
books.Pages = childnode.InnerText;
break;
case "author":
books.Author = childnode.InnerText;
break;
case "price":
books.Price = childnode.InnerText;
break;
case "publisher":
books.Publisher = childnode.InnerText;
break;
case "pubdate":
books.Pubdate = childnode.InnerText;
break;
case "author-intro":
books.Author_intro = childnode.InnerText;
break;
}//end switch
break;
}
}//end switch
}//end foreach
}//end foreach
return books;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2