iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
ChatGPT & Codex

我的音樂不該被平台綁架:30 天用 ChatGPT × Codex 打造跨平台 Music Recap系列 第 9 篇

Day 9|YouTube Music 已經給我徽章,為什麼還不能直接算全球排名?

  • 分享至 

  • xImage
  •  

昨天把朋友的 Spotify 資料接進共同事件層後,我重新確認了這個專案真正想回答的問題。

我主要使用 YouTube Music。我想知道的不是「兩個人的資料合在一起誰聽得多」,而是:

我聽 YOASOBI 的程度,如果把其他音樂平台的聽眾也放進來,究竟落在什麼位置?

所以 Day 9 不做排名畫面,也不先做歌曲名稱模糊比對。今天只做一件事:把真的能拿到的比較資料查清楚,而且成功、失敗、需要授權都要留下實際證據。

一、我其實有 YouTube Music 官方排名證據

一開始我只有 Google Takeout 的觀看紀錄。

它能告訴我某個時間看過或聽過哪一首歌,卻沒有逐筆實際播放秒數。

但我後來想到另一份官方資料:

YouTube Music 的「頭號聽眾」徽章。

我把帳號裡的徽章原件翻出來後,事情突然變得具體很多。

例如:

聆聽月份 藝人 徽章顯示的聽眾母體 排名文字
2026/08 YOASOBI 4,285 萬 你排名前 0.01
2026/07 YOASOBI 4,131 萬 你排名前 0.01
2026/06 YOASOBI 3,720 萬 你排名前 0.01
2026/05 YOASOBI 3,756 萬 你排名前 0.01
2026/04 YOASOBI 4,305 萬 你排名前 0.01
2026/01 YOASOBI 4,585 萬 你排名前 0.01
2025/12 YOASOBI 4,367 萬 你排名前 0.01
2025/08 YOASOBI 4,986 萬 你排名前 0.01
2025/03 YOASOBI 7,773 萬 你排名前 0.01

更早的徽章文案不一樣。

2025 年 2 月、1 月與 2024 年 12 月明確寫的是:

「你是排行前 0.01% 的忠實聽眾」

2024 年 11 月與 10 月則是前 0.02%。

這裡有一個很重要的細節:

較新的徽章畫面寫「排名前 0.01」,畫面上沒有百分比符號。

所以我不能因為舊徽章曾經寫過 0.01%,就自動把新徽章的 0.01 也補成 0.01%。

資料裡必須保留 YouTube 原本顯示的文字,再另外記錄「百分比單位是否明確」。

這正是這個專案一直在做的事:看起來很像的東西,沒有證據就不能直接當成同一件事。

另外,這些徽章目前沒有批次匯出功能。

分享功能也只能一張一張操作,所以我不打算要求自己把每張分享出去。現階段直接保存原始截圖,再整理成結構化 evidence,比較實際。

二、Last.fm:拿到 API key 後,結果和匿名查詢完全不同

一開始直接打 Last.fm 網頁時,我拿到的是 Client Challenge。

沒有 API key 的 API 查詢也只會回缺少必要參數。

所以我實際申請 API key,再重新查一次。

這次成功了。

YOASOBI 的 artist.getInfo 真實回應中:

  • MusicBrainz ID:df6c619f-4334-43e2-8b6a-4a32af1e4f85
  • listeners:948,292
  • playcount:57,417,148

這代表 Last.fm 確實有一個可取得的 YOASOBI 累積統計。

但我要的是「每個聽眾聽了多少」。

因為沒有分布,就無法把一個人的分數放進去排名。

以前 Last.fm 有一個很接近需求的方法叫 artist.getTopFans。

我也真的用有效 API key 試了一次,伺服器回:

Invalid Method - No method with that name in this package

error 3。

也就是說,這條舊方法目前不能用了。

我還測了 user.getWeeklyChartList。

它成功回傳 1,127 個 weekly chart 時間區間,從 2005-02-13 到 2026-09-20 UTC。

不過這份資料只是「可以查週榜的時間窗」。

它不代表我從 2005 年就有 Last.fm 聆聽紀錄,也不是 YOASOBI 的使用者分布。

所以 Last.fm 現在的結論很清楚:

總 listeners 和總 playcount 可以取得,但我還沒有官方介面可以直接列出完整 YOASOBI 聽眾分布。

三、ListenBrainz:分母有了,但 API 只給頭部聽眾

ListenBrainz 的結果又是另一種狀況。

我用 YOASOBI 的 MusicBrainz ID 實際查 listener stats,拿到:

範圍 來源回報帳號數 總 listen 數 API 實際列出帳號
all_time 7,612 616,111 9
2026/08 2,189 28,249 9
2025 年 3,525 141,661 9

這裡不是「沒有分母」。

真正的問題是:

ListenBrainz 告訴我總共有多少帳號,也告訴我總 listen 數,卻只列出九個頭部帳號。

我還試了額外的 count、offset 參數。

回來的內容和原本完全相同,所以不能假裝它可以一路分頁,把 2,189 或 7,612 個帳號全部列出來。

四、那直接下載 ListenBrainz 全部資料呢?

這條路其實可行。

我真的查到目前的 full listens dump,壓縮檔約 246 GB。

今天沒有把 246 GB 全部抓完,因為那不是一個適合在臨時工作環境裡硬跑的東西。

但我實際下載了固定大小的檔案前段並解壓,確認資料裡有:

  • user_id
  • user_name
  • timestamp
  • track_metadata
  • recording_msid

也就是說,如果固定一個完整 snapshot,再把 YOASOBI 的 artist identity 規則訂好,確實可以逐帳號累計 listen_count,自己重建一個 ListenBrainz 社群裡的 YOASOBI 分布。

我也檢查了另一個比較小的 statistics dump,結果發現不能偷懶。

前段抽到的 20 個完整帳號統計列裡,有 8 列的藝人清單被截斷。

最明顯的一列宣告有 8,629 位藝人,實際只列 1,000 位。

所以:

「清單裡沒看到 YOASOBI」不能直接當成零次。

這也是為什麼真正要做完整分布時,我還是得回到逐筆 listens,或其他能證明完整性的資料。

五、現在三個來源到底各自有什麼?

到今天收尾,三條最重要的來源已經能明確分開。

YouTube Music

我有自己的官方頭號聽眾徽章,而且很多月份直接顯示 YOASOBI 的月度聽眾母體。

它非常適合證明「YouTube Music 平台內的位置」。

但徽章沒有公開我的實際播放分數,也沒有完整揭露排名演算法。

Last.fm

可以取得 YOASOBI 的累積 listeners 與 playcount。

但舊的 artist.getTopFans 已經實測失效,目前沒有取得完整每帳號 playcount 分布。

ListenBrainz

可以取得來源回報的帳號分母、總 listen 數和少量頭部帳號。

完整 dump 則有機會重建整個社群分布,只是需要真正的大型資料處理。

六、為什麼還不能把三個平台加成「全球排名」?

因為這三個來源算的東西還不是同一個單位。

YouTube Music 徽章是平台自己算出的月度聽眾位置。

Last.fm 的數字是累積 listeners 和 scrobbles。

ListenBrainz 則用自己的 listen 規則,而且參與 ListenBrainz 的帳號只是特定社群。

我的 YouTube Takeout 又只有 activity,沒有逐筆實際播放秒數。

它不能直接改名成一次符合門檻的 Last.fm scrobble、ListenBrainz listen 或 Spotify stream。

另外,同一個人可能同時使用 YouTube Music、Spotify、Last.fm 和 ListenBrainz。

把四邊的人數直接相加,會把重疊使用者算很多次。

所以今天仍然不能產生一個「全球第幾名」。

但和一開始相比,差別已經很大。

我現在至少真的知道:

  1. YouTube Music 官方確實有我的月度頭號聽眾排名證據。
  2. Last.fm 真正可取得什麼,以及舊 TopFans API 已經失效。
  3. ListenBrainz API 的分母與截斷情況。
  4. ListenBrainz full dump 確實具有重建社群分布所需的欄位。

這些都不是只看 API 文件後的猜測。

七、今天有哪些事情一定需要我本人做?

這次也順便確認了一個很實際的分工。

YouTube Music 徽章只存在我的帳號介面裡,所以原件必須由我自己提供。

Last.fm API key 也必須由帳號持有人申請。

我沒有把 key 放進專案,只在自己的 PowerShell 環境中呼叫 API,再把回應檔交給分析流程。

除此之外,資料解析、來源比較、程式、驗收、GitHub 文件與後續設計,都可以由 ChatGPT 協助完成。

這個區分很重要。

以後如果遇到真的需要帳號本人完成的事情,我會把它明確標成需要使用者操作,不會把「暫時拿不到」寫成「做不到」。

八、Day 9 的結論

Day 9 今天真正完成的是:

排名資料來源試查與可比較性報告。

不是全球排名。

也不是舊計畫裡的 Track Identity 或 fuzzy matching。

我現在已經有三種真實證據:

  • YouTube Music 官方徽章
  • Last.fm 有效 API 回應
  • ListenBrainz API 與 dump 試查

下一步 Day 10 要做的是「聽眾比較資料契約」。

也就是正式規定:

比較的是哪個群體、哪段期間、什麼單位、分布是否完整、百分位文字的單位是否有明確證據,以及什麼情況下系統必須直接回答「不能排名」。

現在終於不是先做一個看起來很酷的排名頁面,再回頭問那個數字從哪裡來。

我們先把尺做對,再開始量。


上一篇
Day 8|接上朋友的 Spotify:116,605 筆紀錄,為跨平台聽眾排行打底
下一篇
Day 10|比誰、比什麼,先定義清楚:替跨平台聽眾比較建立資料契約
系列文
我的音樂不該被平台綁架:30 天用 ChatGPT × Codex 打造跨平台 Music Recap 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言