#101 使用 YouTube Data API 抓取有趣的 Youtuber 影片 & MV

最近大家愈來愈少看電視 & 買 CD,因為很多人都從電腦觀看有趣的 Youtuber 影片和聽音樂。 YouTube 上有那麼多精彩的影片,有沒有可能我們自己寫個 App,串接它豐富的資料呢 ?

當然可以,透過 YouTube Data API,我們不只能從 YouTube 回傳的 JSON 取得影片的相關資訊,也可以針對影片留言,like & 上傳影片。

彼得潘對神秘的故事傳說特別著迷,所以最近常看老高與小茉的影片。接下來彼得潘就以老高與小茉為例,介紹如何串接 YouTube Data API,抓取老高與小茉神秘故事的影片。

取得連結 YouTube Data API 需要的 API key

為了連結 YouTube Data API 抓資料,我們必須在 API 的網址裡包含 API key,因此我們先在 Google 的開發網站上建立一個 project,取得它的 API key。

點選以下連結,建立 YouTube Data API 對應的 Project。

我們可以設定 YouTube Data API 對應新的 project,或是對應之前建立的 project。

在此我們點選下圖的箭頭,然後點選新增專案。

輸入專案名稱 Demo,點選建立。

點選下一步。

點選啟用。

點選左上的三條線打開側邊欄,點選 API 和服務,點選憑證。

進入憑證頁面。

點選建立憑證,點選 API 金鑰。

API 金鑰成功建立後,可點選下圖的紅色框框複製。

ps: 如果忘了 API 金鑰,可從以下連結進入 Google 開發網站,切換到 project 的憑證分頁點選顯示金鑰

YouTube Data API

YouTube Data API 的格式如下

https://www.googleapis.com/youtube/v3/

網址裡必須包含參數 key=API key,比方以下 API 可取得影片未來人預言的相關資訊,影片的 id 為 jeqH4eMGjhY,參數 part 說明想在 JSON 裡看到的內容。

https://www.googleapis.com/youtube/v3/videos?id=jeqH4eMGjhY&key=Abccato&part=snippet

對 videos API 來說,part=snippet 時將包含以下內容。

從影片網址 https://www.youtube.com/watch?v=jeqH4eMGjhY 可知影片 id 為 jeqH4eMGjhY

取得 channel 裡上傳影片清單的 playlists ID

為了取得老高與小茉在 Uploads 頁面的影片清單,我們必須先取得 Uploads(上傳影片)的 playlists ID。

透過 channels list API 取得 channel 的相關資訊,從它回傳的 JSON 可找到 Uploads 的 playlists ID。

API 格式

https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id=channel的id&key=API key

以下網址 https://www.youtube.com/channel/ 後的字串為 channel id,因此老高與小茉的 channel id 為 UCMUnInmOkrWN4gof9KlhNmQ

範例: (ps: API key 是假的)

在 key 欄位填入從 project 頁面取得的 API key。

https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id=UCMUnInmOkrWN4gof9KlhNmQ&key=Abccato

從 JSON 的 uploads 欄位,找到 playlist 的 id 為 UUMUnInmOkrWN4gof9KlhNmQ

取得 playlist 的影片清單

有了上傳影片的 playlists ID,透過 playlistItems list API 可取得它的影片清單。

API 格式

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails,status&playlistId=playlist的id&key=API key&maxResults=影片數量

範例: (ps: API key 是假的)

maxResults 代表回傳的影片數量,可指定的最大數字為 50。

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails,status&playlistId=UUMUnInmOkrWN4gof9KlhNmQ&key=Abccato&maxResults=20

從 array items 的每個 item 查詢影片內容,比方下圖的 videoId 為 vBbMnDFy4YY,因此影片網址為 https://www.youtube.com/watch?v= 加上 vBbMnDFy4YY。

從 thumbnails 欄位可看到各種尺寸的影片縮圖網址。

比方以下是 480 * 360 的圖片連結。

https://i.ytimg.com/vi/vBbMnDFy4YY/hqdefault.jpg

取得下一頁的影片

如果影片超過 maxResults 的上限 50 部呢 ? 剛剛 API 回傳的 nextPageToken 欄位可幫助我們取得下一頁的影片。

範例: (ps: API key 是假的)

在 playlistItems list API 裡包含參數 pageToken,將它指定為上圖 nextPageToken 的 CBQQAA。

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails,status&playlistId=UUMUnInmOkrWN4gof9KlhNmQ&key=Abccato&maxResults=20&pageToken=CBQQAA

此時回傳的第一部影片變成了他們究竟是誰?比金字塔還誇張的遠古文明

取得影片的留言清單

透過 commentThreads list API 取得影片的留言清單。

API 格式

https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=video的id&key=API key

範例: (ps: API key 是假的)

https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=vBbMnDFy4YY&key=Abccato

我們可取得留言的相關資訊,比方內容,時間,留言者的名字跟大頭照等。

Search 影片

透過 search list API 搜尋影片。

API 格式

利用參數 q 指定搜尋的字串。

https://www.googleapis.com/youtube/v3/search?part=snippet&q=搜尋的字串&key=API key&type=video&maxResults=影片的數量

範例: (ps: API key 是假的)

https://www.googleapis.com/youtube/v3/search?part=snippet&q=swiftui&key=Abccato&type=video&maxResults=20

上傳資料的 YouTube Data API,比方留言,like & 上傳影片

剛剛介紹的 API 都是讀取的功能,其實我們可以在 YouTube 網站做的事幾乎都能透過 YouTube Data API 實現,像是留言,like & 上傳影片等。

不過這些功能比較麻煩,我們要在 App 裡加入 google 登入功能,使用者要登入後才能使用,而且還要經過 Google 的審核,有興趣的朋友可參考以下連結的說明。

作品集

--

--

彼得潘的 iOS App Neverland
彼得潘的 100 道 Swift iOS App 謎題

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com