使用Google api查询书本资讯 Day 17

这次实作的功能是使用Google Book api

使用textfield输入ISBN码按下Button,自动填入书名、书本简介、书本作者、书本图片

1. 建立一个@IBAction的Button到ViewController

从URLSession开始的内容都会建立这个CheckButton内

https://i.imgur.com/wcDihWc.png

1.1 建立 textfield连结

		@IBOutlet weak var Booktitle: UITextField!
    @IBOutlet weak var Bookdescription: UITextView!
    @IBOutlet weak var BookISBN: UITextField!
		@IBOutlet weak var Bookauthors:UITextField!
		@IBOutlet weak var Bookimage:ImageView!

2. 建立URLSession来去得到json档案

URLSession.shared.dataTask(with: url){(data,response,error) in
	if let data = data, let content = String(data:data, encoding: .utf8){
		// 先列印出内容,检查是否正确下载json档案
		print(content)
	}

2.1 将content印出来的内容丢入jsoneditoronline方便用肉眼观看

https://i.imgur.com/1DkrEGJ.png

3. 建立Struct 来放置JSONDecoder後的资料

根据上面解析出来的json资料配置Decoder的资料结构

因为我要显示的是书名,书本描述,所以我找的是titledescription

struct BookInfo:Codable{
	// 因为所需要的东西在Nested Array内
	let items:[BookNeed]
}

struct BookNeed:Codable{
	let volumeInfo:[Content]
}

struct Content:Codable{
	let title:String
	let authors:[String]
	let description:String
	let imageLinks:[imagelinks]
}

struct imagelinks:Codable{
	let thumbnail:URL
}

3. 建立JSONDecoder来解析json档案

// 使用Google Book的web api来查询所要的资料
let url = URL(string:"https://www.googleapis.com/books/v1/volumes?q=isbn:\(String(BookISBN.text!))")!
// 将JSONDecoder建立在刚刚的URLSession下面
URLSession.shared.dataTask(with: url){(data,response,error) in

// 建立JSONDecoder实例
	let decoder = JSONDecoder()

	if let data = data{
		do{
				// 让decoder来解析data,让解析完成的资料储存在BookInfo的资料结构内
				let Response = try decoder.decode(BookInfo.self, from:data)
				// 让textfield内的文字显示在textfield上
				self.Booktitle.text = Response.items.first?.volumeInfo.title
				self.Bookdescription.text = Response.items.first?.volumeInfo.description
				self.Bookauthors.text = Response.items.first?.volumeInfo.authors.first
				let imageurl = Response.items.first?.volumeInfo.imageLinks.thumbnail
				let imageData = try Data(contentOf:imageurl!)
				self.Bookimage.image = UIImage(data:imageData)
			}catch{
				print("error")
				}
	}
}.resume()
			

/

成果展示:

https://i.imgur.com/ka6SA4D.gif


参考资料

利用 JSONDecoder 和 Codable 解析 JSON 和生成自订型别资料

Json解析笔记

Day 03: 试着解析 JSON 的档案吧! - iT 邦帮忙::一起帮忙解决难题,拯救 IT 人的一天


<<:  纵深防御架构有效性检视

>>:  【D7】试用厨具:历史资料(Historical Market Data)

[第15天]理财达人Mx. Ada-持仓部位(库存)(positions)

前言 本文说明持仓部位(库存)(positions)资讯。 程序实作 程序 positions =a...

LeetCode解题 Day08

848. Shifting Letters https://leetcode.com/problem...

数位AI化

人的科技文明发展始终来自於人性 在疫情後的时代,所有的一切都将发生改变,这已经是一个不能逆转的趋势了...

(Day23) ES6 箭头函式

前言 跟变数一样 JavaScript 在 ES6 为函式新添加一种写法,他和传统函式有以下差异: ...

Day 8 python类别

今天我们要介绍的是python的类别,所谓的类别就是指将方法变数或物件建成一个群组,里面会有需要用到...