iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0

一、 前言

前幾天我們實際使用 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、名稱、類型、語言、類型分類、狀態、播放時間等資料。

例如:

  • id:節目的編號
  • name:節目名稱
  • type:節目類型
  • language:語言
  • genres:分類
  • status:目前狀態
  • runtime:播放時間
    前幾天比較搜尋結果時,我們已經看過這些欄位。

今天比較重要的是觀察它們在 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,
就不會覺得只是「一大串看不懂的文字」。

⸻

九、 總結

今天沒有另外更換搜尋關鍵字,
而是直接使用前幾天已經查詢過的結果來分析。

主要觀察了以下幾個地方:

  1. 最外層的 [ ],確認搜尋結果是一個 Array。
  2. Array 裡面的 { },代表一筆搜尋結果。
  3. show 本身也是一個 Object。
  4. genres 是 Array,可以放多個分類。
  5. schedule 是 Object,裡面還有 days Array。
  6. network 是 Object,裡面又有 country Object。
  7. externals 也是一個 Object,裡面還有其他外部資料。

前面幾天比較像是在「使用 API 找資料」,
今天則是進一步去理解「API 是怎麼把這些資料整理起來的」。

接下來就可以開始利用這些查詢結果做小整理,
把前面學到的 API 概念真正串起來
作為電影API的總結


上一篇
Day 16|比較不同關鍵字的電影 API 查詢結果
系列文
Web API:從零開始探索公開 API 與資料應用 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言