一、 前言
前幾天我們實際使用 TVmaze 的 API 搜尋了不同的關鍵字,
也比較了搜尋 Harry Potter、Harry 和 Potter 時得到的結果。
從前面的操作可以發現,
API 回傳的資料其實不只是單純的一個電影名稱,
而是包含了很多不同的資訊,
這些資料全部以 JSON 的格式整理在一起。
Day 11 的時候,
我們已經接觸過書籍 API 的 JSON 結構,
知道JSON裡面會有Array、Object 等不同的資料結構。
今天就把同樣的概念套用到電影 API 上,仔細看看 TVmaze 回傳的資料到底是怎麼一層一層組成的。
⸻
二、 電影API 回傳的最外層
以我們前面搜尋 Harry Potter 的結果為例,回傳資料最前面可以看到:
[
{
"score": 0.55135465,
"show": {
...
}
}
]
首先可以注意到最外面是:[
以及最後的:]
這代表最外層是一個 Array,
API 搜尋之後可能會回傳多筆搜尋結果,
而不是只有一筆。
這也可以解釋為什麼我們搜尋一個關鍵字後,
畫面上可能會看到很多組資料。
⸻
三、 Array
在最外層的 Array 裡面,可以看到:
{
"score": 0.55135465,
"show": {
...
}
}
這一層是 Object(物件)。
可以把它理解成「一筆搜尋結果」。
而這個 Object 裡面又有兩個比較重要的部分:
"score"
"show"
score 是 TVmaze 用來表示這筆搜尋結果相關程度的數值。
而 show 則是這筆結果真正的節目資料。
所以整體結構可以簡單想成:
Array
└── Object
├── score
└── show
這時候就可以發現,
JSON 並不是所有資料都放在同一層,
而是會有「裡面再包一層」的情況。
⸻
四、 show
進入 show 後,可以看到:
"show": {
"id": 68803,
"url": "https://www.tvmaze.com/shows/68803/harry-potter",
"name": "Harry Potter",
"type": "Scripted",
"language": "English",
"genres": [
"Fantasy",
"Supernatural"
],
"status": "In Development",
"runtime": 60,
...
}
這裡的 show 本身也是一個 Object。
裡面包含了節目的 ID、名稱、類型、語言、類型分類、狀態、播放時間等資料。
例如:
今天比較重要的是觀察它們在 JSON 裡面的位置,
以及它們是怎麼被包在 show 裡面的。
⸻
五、 genres Array
在 show 裡面還有一個很明顯的
"genres": [
"Fantasy",
"Supernatural"
]
因為 genres 的外面使用的是 [ ],
所以他是一個 Array。
這裡也可以看到 Array 不一定只能放數字或物件,
也可以放文字。
例如這次的 genres 裡面就是
"Fantasy"
"Supernatural"
兩個文字資料。
如果搜尋到其他節目,
也可能只有一個分類,或是出現不同的分類。
所以 API 使用 Array 的方式,
就是讓同一個欄位可以放入多個資料。
⸻
六、 schedule
繼續往下看,還可以找到:
"schedule": {
"time": "",
"days": [
"Friday"
]
}
這裡就出現了另一種「Object 裡面再放 Array」的結構。
"schedule" 本身是 Object。
而 schedule 裡面又有:
"time"
"days"
其中 days 又是一個 Array。
所以可以把它畫成:
show
└── schedule
├── time
└── days
└── Friday
JSON 其實很像一個有階層的資料夾,
不是所有資料都平放在一起,
而是可以根據不同的用途分類。
⸻
七、 network和country
另外一個很適合觀察的地方是 network。
例如:
"network": {
"id": 8,
"name": "HBO",
"country": {
"name": "United States",
"code": "US",
"timezone": "America/New_York"
}
}
這裡的 network 是一個 Object。
但是 network 裡面的 country 又是一個 Object。
而 country 裡面還有:
"name"
"code"
"timezone"
所以這次可以看到更深一層的結構:
show
└── network
├── id
├── name
└── country
├── name
├── code
└── timezone
原本看起來只是「電影的資料」,
實際上裡面還可以繼續細分成電視台、國家、時區等資訊。
⸻
八、 結構整理
經過今天的觀察,可以把 TVmaze 搜尋結果簡化成:
Array
└── Object
├── score
└── show
├── id
├── name
├── type
├── language
├── genres → Array
├── status
├── runtime
├── schedule → Object
│ └── days → Array
├── rating → Object
├── network → Object
│ └── country → Object
└── externals → Object
其實實際回傳的欄位比這裡更多,
但先挑比較容易看出結構的部分來觀察。
這樣再回頭看 API 回傳的 JSON,
就不會覺得只是「一大串看不懂的文字」。
⸻
九、 總結
今天沒有另外更換搜尋關鍵字,
而是直接使用前幾天已經查詢過的結果來分析。
主要觀察了以下幾個地方:
前面幾天比較像是在「使用 API 找資料」,
今天則是進一步去理解「API 是怎麼把這些資料整理起來的」。
接下來就可以開始利用這些查詢結果做小整理,
把前面學到的 API 概念真正串起來
作為電影API的總結