前往
大廳
主題

Unity-檢查Youtube直播功能

發條 | 2022-06-28 18:31:14 | 巴幣 104 | 人氣 410

各位安安我是發條
近期個人無聊的時候
把過去半途而廢的小桌面寵物拿出來重新開發
除了打掉整個一年前的我所寫出來的系統外
也開始研究加入一些小功能(因為美術能力有限,無法增加太多角色動作所以就往這方向發展w)

由於新版的桌面寵物角色是VTuber天野ピカミィ
所以想到可以加入直播檢查系統,搜尋並顯示正在或是接下來的直播

以下文章大概的說明一下做法,讓有興趣製作這類功能的開發者可以參考(=w=)
(當然也是拋個磚,有其他更好的做法也希望能提供討論一下XD)

起初,我使用最簡單的做法就是使用Youtube API
呼叫API、解析回傳資料後就可以輕鬆的做出此效果
但是玩了一陣子之後發現API無效了,原因是可呼叫API的使用量達上限
奇怪了我才剛測試了一個多小時,怎麼就爆了呢?
YT API預設的呼叫使用量是每天10,000
但是後來仔細的查了一下,使用不同的呼叫指令會消耗不同的Quota
例如查詢的指令list一次就消耗100,所以每天只能查詢總共100次
這樣其實不是很方便,所以另尋他法

後來看到國外有人說其實可以檢查指定頻道直播連結的Tag來知道是否有直播
做法大致如下:
  1. 先request連結: https://youtube.com/channel/[頻道ID]/live
  2. 找到回傳內容中,擁有attribute rel="canonical"的link標籤
  3. 該標籤內找尋attribute href,內容可以得知是否有直播
頻道ID並非該頻道的帳號名稱
如果直接想在網頁上找到的話,可以網頁F12找尋canonical
找到的連結後面的字串就是頻道ID

接下來就可以開始動工了

首先在Unity中製作一個腳本處理Request
然後為了可以快速解析Html,我在專案裝上Html Agility Pack
(記得需要在Unity Plugins加入dll檔,不然會報錯)
取得Request回傳資料後,轉成HtmlDocument,接著查詢是否有rel="canonical"的標籤並且讀取href的內容
得到的結果會有以下兩種:
如果今天該頻道沒有開台,會是該頻道的連結
EX:https://www.youtube.com/channel/UCajhBT4nMrg3DLS-bLL2RCg

如果該頻道正在開台(或是有預定開台時間),會出現帶有"/watch?v="在連結中
EX: www.youtube.com/watch?v=NB11zj6Rrek
因此基本上只要檢查有沒有channel或是/watch?v字串即可

然後要怎麼分辨是正在開台還是預計要開台呢?
個人比對了一下回傳回來的所有內容後
發現如果是預計開台的話,會有個回傳資料名稱是"scheduledStartTime"
可以用這個關鍵字來區分狀態

實況標題的部分呢,找尋有name='title' attribute的meta標籤,並且找尋content裡面的內容
直播影片ID就簡單了,找/watch?v=後面的字串即可
總結一下程式碼大概長這樣
以上就可以抓到指定頻道是否有直播及直播內容了

預覽圖的部分
Youtube的直播影片初始預覽圖的連結規格如下:
https://i.ytimg.com/vi/[直播影片ID]/mqdefault_live.jpg
如果想要其他規格的,可以去google一下(=w=)
然後把回傳的資訊轉換成sprite等圖片屬性即可

如果以上動作有成功的話,再套用到你的Unity場景中就能使用了(=w=)

今天的文章大致到這邊
如果有任何問題歡迎來討論~

由於目前程式碼沒有獨立出來一個專案
所以沒有提供Github分享之類的
之後有時間再看看要不要做吧(我就爛)

感謝各位閱讀(=w=)
送禮物贊助創作者 !
0
留言

創作回應

thenewguy
感覺也可以用python做查找的那個部分,不過之後要視覺化結果不會很方便XD
2022-09-02 11:34:40
發條
我還真沒用Python做過w
2022-09-02 12:10:55
發條
有空試試
2022-09-02 12:11:05

更多創作