文總有一個《中華語文知識庫》,其中漢字影音有《漢字說故事動畫》,影片放在 YouTube 中,頻道的網址如下:
註:文末有一個小工具可以輸入國字列出找到的影片。🔍🔍
原本想利用 RSS 來解析出影片的清單,頁面上找不到 RSS 的連結,網路上有人說,由頻道網址找到 channel id 再加到「https://www.youtube.com/feeds/videos.xml?channel_id=」後面就可以了。可是現在的網址是用小老鼠(@)的好記格式了,無法直接複製貼上了,怎麼辦?
如果知道怎麼看頻道頁面的原始碼,那就在原始碼中搜尋:
"canonical"
找到後,再往後看 href 裡的網址,就是該頻道的標準網址,最尾巴的就是 channel id。
而想找 RSS 的連結,就在原始碼中搜尋:
title="RSS"
找到後,一樣的,取 href 中的網址,就是該頻道的 RSS 網址。會使用 Console 就下這樣的指令:
document.querySelector('link[rel="alternate"][type="application/rss+xml"]')?.href
哈!總是會想,有沒有更簡單的方法?可不可以我貼上 YouTube 頻道的網址,就直接出現 channel id 跟 RSS 網址,按個複製鈕就好了!
小工具的製作原理很簡單:
- 下載 YouTube 頻道頁面原始碼。
- 解析原始碼,找到關鍵的標籤並擷取網址。
- 輸出資料。
但是利用 JavaScript 實作時遇到了一個大問題,YouTube 伺服器會進行「機器人驗證」,然後就抓不到頻道頁面的原始碼了!
幸好之前在解決 HTML5 FUN Audio Player 抓不到 YT 字幕時,也遇過類似的問題 (詳見「利用 iframe 解決因為 CORS 而抓不到YT字幕的問題」),可以利用在「iframe」進行下載與解析的步驟來避免被要求「機器人驗證」的問題。
▋ YouTube 頻道 channel id , RSS 網址解析小工具
以下是一個簡單的 YouTube 頁面解析小工具,只要輸入 YouTube 的網址,可試著抓出一些資料,試試看吧!
▋ 所有影片的播放清單網址
上面的小工具最後提供了一個「所有影片的播放清單」的連結是什麼?一般頻道主會提供他自定的播放清單,那有沒有沒可以播放該頻道所有影片的播放清單呢?看到有高手提到,只要能找到頻道的 channel id,將它的前兩個字母 UC (User Channel) 置換為 UU (User Uploaded),變成一個新的播放清單 id, 再加到底下這個播放清單用的網址後面:
https://www.youtube.com/playlist?list=
就可以用來播放該頻道所有公開的影片了。
▋ 播放清單 JSON 格式資料
本以為有了前面的網址,這下子可以抓到自己要的影片資料了吧?想得美!YouTube 的 RSS 只能抓到最新的 15 部影片資料;播放清單的頁面沒有特別處理,只能由原始碼中找到 100 部影片的資料 ...... ,要花很多時間再研究。
有一個工具根本可以輕鬆拿到所有影片或播放清單中的所有影片資料,而且可以直接輸出為 JSON 格式,「yd-dlp」這個開源的超級小幫手還是最強的!
如果電腦中有 yt-dlp,只要這樣的指令:
yt-dlp --flat-playlist --dump-single-json "想抓網址" > playlist.json
就可以將該網址的影片資訊輸出到名為 playlist.json 的檔案中。
不過,裡面如果有非英數的文字與符號,都會以 \u???? 的 Unicode 碼呈現。以下的小工具可以將被編碼過的文字還原。
🔮 將編碼過的內容貼進來解碼:
透過 yt-dlp 的助力,我將中華語文知識庫 YouTube 的《漢字說故事動畫 Ⅰ》和《漢字說故事動畫Ⅱ》兩個播放清單資料彙整了一下,95 + 80 = 175 部影片的資料,哈!發現一件有意思的事,「中華語文知識庫」網站有自己的資料動態生成選單,裡面的記錄是 151 筆,和 YouTube 清單加起來的 175 部有一點點差異;另外,在漢字說故事動畫Ⅱ 中的影片標題有兩個「不乖」,「18萬」的數字用的是全形數字,跟其它的不同,還有一部影片沒有標題,看起來應該是「27我」;在漢字說故事動畫Ⅰ 最後一集是100,但是影片播放清單卻只有95部,比對了一下,少了「5口, 19文, 33犬, 42生, 81」,81到底是哪一個字?在影片清單中沒有這一集。為了找出少了什麼影片,花了點時間,但功力又增加了不少 ^_^ 。
▋ 漢字說故事動畫搜尋小工具
▋ 相關連結
沒有留言:
張貼留言