豆瓣API获取书籍详细信息
2017-01-08 17:28
495 查看
当我们需要使用书籍详细信息时,如向数据库中录入书籍的信息,如果通过人工输入的方式不仅会十分的繁琐,而且容易出错。豆瓣提供了相关API,可以直接通过书籍的ISBN码,获取该书籍的详细信息。
程序下载(C#代码):点击打开链接
程序下载(Java代码):点击打开链接
下面以C#为例介绍如何通过豆瓣API获取书籍的详细信息。
豆瓣API:https://api.douban.com/v2/book/isbn/
程序运行截图如下所下,只展示了书籍的部分信息。大家可以根据自己的需要,从获取的json数据中解析出需要的书籍信息。
1. 通过Http Get请求从豆瓣获取书籍json数据。
//HTTP的GET请求,获取书籍详细信息
private static string doGet(string url, string charset)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response != null)
{
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, System.Text.Encoding.GetEncoding(charset));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
throw new Exception();
}2. 对获取到的json数据进行解析:
(1)根据自己的需要创建一个类,用于保存解析的结果
//豆瓣API返回的信息很多,可以根据自己的需要重新定义该类
public class BookInfo
{
//标题
public string title { get; set; }
//作者
public string[] author { get; set; }
//出版社
public string publisher { get; set; }
//封面图片的url
public string image { get; set; }
//isbn10
public string isbn10 { get; set; }
//isbn13
public string isbn13 { get; set; }
//出版日期
public string pubdate { get; set; }
//概述
public string summary { get; set; }
//页数
public string pages { get; set; }
//价格
public string price { get; set; }
//获取失败的返回信息
public string msg { get; set; }
public string code { get; set; }
}(2)解析函数
//Json解析
private static BookInfo toMap(string jsonString)
{
//实例化JavaScriptSerializer类的新实例
JavaScriptSerializer jss = new JavaScriptSerializer();
try
{
//将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象
return jss.Deserialize<BookInfo>(jsonString);
}
catch
{
return null;
}
}3. 根据书籍的ISBN码获取书籍详细信息
//根据ISBN码从豆瓣API获取书籍详细信息
public static bool getInfo(string isbn, out BookInfo bookInfo, out string json)
{
try
{
//豆瓣API
string uri = "https://api.douban.com/v2/book/isbn/" + isbn;
//获取书籍详细信息,Json格式
json = doGet(uri, "utf-8");
//将获取到的Json格式的文件转换为定义的类
bookInfo = toMap(json);
return true;
}
catch
{
//信息获取失败
bookInfo = null;
json = "";
return false;
}
}4. 根据url获取书籍的封面图片
//HTTP获取图片,获取书籍封面
public static Image doGetImage(string url)
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
if (response != null)
{
Stream stream = response.GetResponseStream();
return Image.FromStream(stream);
}
return drawCover();
}
程序下载(C#代码):点击打开链接
程序下载(Java代码):点击打开链接
下面以C#为例介绍如何通过豆瓣API获取书籍的详细信息。
豆瓣API:https://api.douban.com/v2/book/isbn/
程序运行截图如下所下,只展示了书籍的部分信息。大家可以根据自己的需要,从获取的json数据中解析出需要的书籍信息。
1. 通过Http Get请求从豆瓣获取书籍json数据。
//HTTP的GET请求,获取书籍详细信息
private static string doGet(string url, string charset)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response != null)
{
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, System.Text.Encoding.GetEncoding(charset));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
throw new Exception();
}2. 对获取到的json数据进行解析:
(1)根据自己的需要创建一个类,用于保存解析的结果
//豆瓣API返回的信息很多,可以根据自己的需要重新定义该类
public class BookInfo
{
//标题
public string title { get; set; }
//作者
public string[] author { get; set; }
//出版社
public string publisher { get; set; }
//封面图片的url
public string image { get; set; }
//isbn10
public string isbn10 { get; set; }
//isbn13
public string isbn13 { get; set; }
//出版日期
public string pubdate { get; set; }
//概述
public string summary { get; set; }
//页数
public string pages { get; set; }
//价格
public string price { get; set; }
//获取失败的返回信息
public string msg { get; set; }
public string code { get; set; }
}(2)解析函数
//Json解析
private static BookInfo toMap(string jsonString)
{
//实例化JavaScriptSerializer类的新实例
JavaScriptSerializer jss = new JavaScriptSerializer();
try
{
//将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象
return jss.Deserialize<BookInfo>(jsonString);
}
catch
{
return null;
}
}3. 根据书籍的ISBN码获取书籍详细信息
//根据ISBN码从豆瓣API获取书籍详细信息
public static bool getInfo(string isbn, out BookInfo bookInfo, out string json)
{
try
{
//豆瓣API
string uri = "https://api.douban.com/v2/book/isbn/" + isbn;
//获取书籍详细信息,Json格式
json = doGet(uri, "utf-8");
//将获取到的Json格式的文件转换为定义的类
bookInfo = toMap(json);
return true;
}
catch
{
//信息获取失败
bookInfo = null;
json = "";
return false;
}
}4. 根据url获取书籍的封面图片
//HTTP获取图片,获取书籍封面
public static Image doGetImage(string url)
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
if (response != null)
{
Stream stream = response.GetResponseStream();
return Image.FromStream(stream);
}
return drawCover();
}
相关文章推荐
- C#生成二维码
- 浅谈C#中的双缓冲
- 实战——二、c#窗体(2)
- c# 解释器模式与sping.net表达式的结合应用(金融里经常需要用到公式,这个公式是抽象的需要自己解释)
- 几种C#实现播放声音的方法
- 【转载】 C#中数组、ArrayList和List三者的区别
- C#下实现软件欢迎界面
- C#HashTable
- C#-WebForm-★ 制作图片验证码 ★
- 【C#】收官
- C# Cookie(2017)
- C#if循环
- C#-WebForm-★ 上传水印图片 ★
- C#的Winform多语言实现(API翻译)
- C#时间格式化(Datetime)用法详解
- C#的Winform多语言实现(resx文件)
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
- VS2015中的MVC项目改用本机IP地址访问
- CSharpGL(40)一种极其简单的半透明渲染方法
- Windows 编程中用Service开启一个外部进程的两种语言实现方式(C++,C#)。