昨天把朋友的 Spotify 資料接進共同事件層後,我重新確認了這個專案真正想回答的問題。
我主要使用 YouTube Music。我想知道的不是「兩個人的資料合在一起誰聽得多」,而是:
我聽 YOASOBI 的程度,如果把其他音樂平台的聽眾也放進來,究竟落在什麼位置?
所以 Day 9 不做排名畫面,也不先做歌曲名稱模糊比對。今天只做一件事:把真的能拿到的比較資料查清楚,而且成功、失敗、需要授權都要留下實際證據。
一開始我只有 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 網頁時,我拿到的是 Client Challenge。
沒有 API key 的 API 查詢也只會回缺少必要參數。
所以我實際申請 API key,再重新查一次。
這次成功了。
YOASOBI 的 artist.getInfo 真實回應中:
df6c619f-4334-43e2-8b6a-4a32af1e4f85
這代表 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 的結果又是另一種狀況。
我用 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 個帳號全部列出來。
這條路其實可行。
我真的查到目前的 full listens dump,壓縮檔約 246 GB。
今天沒有把 246 GB 全部抓完,因為那不是一個適合在臨時工作環境裡硬跑的東西。
但我實際下載了固定大小的檔案前段並解壓,確認資料裡有:
也就是說,如果固定一個完整 snapshot,再把 YOASOBI 的 artist identity 規則訂好,確實可以逐帳號累計 listen_count,自己重建一個 ListenBrainz 社群裡的 YOASOBI 分布。
我也檢查了另一個比較小的 statistics dump,結果發現不能偷懶。
前段抽到的 20 個完整帳號統計列裡,有 8 列的藝人清單被截斷。
最明顯的一列宣告有 8,629 位藝人,實際只列 1,000 位。
所以:
「清單裡沒看到 YOASOBI」不能直接當成零次。
這也是為什麼真正要做完整分布時,我還是得回到逐筆 listens,或其他能證明完整性的資料。
到今天收尾,三條最重要的來源已經能明確分開。
我有自己的官方頭號聽眾徽章,而且很多月份直接顯示 YOASOBI 的月度聽眾母體。
它非常適合證明「YouTube Music 平台內的位置」。
但徽章沒有公開我的實際播放分數,也沒有完整揭露排名演算法。
可以取得 YOASOBI 的累積 listeners 與 playcount。
但舊的 artist.getTopFans 已經實測失效,目前沒有取得完整每帳號 playcount 分布。
可以取得來源回報的帳號分母、總 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。
把四邊的人數直接相加,會把重疊使用者算很多次。
所以今天仍然不能產生一個「全球第幾名」。
但和一開始相比,差別已經很大。
我現在至少真的知道:
這些都不是只看 API 文件後的猜測。
這次也順便確認了一個很實際的分工。
YouTube Music 徽章只存在我的帳號介面裡,所以原件必須由我自己提供。
Last.fm API key 也必須由帳號持有人申請。
我沒有把 key 放進專案,只在自己的 PowerShell 環境中呼叫 API,再把回應檔交給分析流程。
除此之外,資料解析、來源比較、程式、驗收、GitHub 文件與後續設計,都可以由 ChatGPT 協助完成。
這個區分很重要。
以後如果遇到真的需要帳號本人完成的事情,我會把它明確標成需要使用者操作,不會把「暫時拿不到」寫成「做不到」。
Day 9 今天真正完成的是:
排名資料來源試查與可比較性報告。
不是全球排名。
也不是舊計畫裡的 Track Identity 或 fuzzy matching。
我現在已經有三種真實證據:
下一步 Day 10 要做的是「聽眾比較資料契約」。
也就是正式規定:
比較的是哪個群體、哪段期間、什麼單位、分布是否完整、百分位文字的單位是否有明確證據,以及什麼情況下系統必須直接回答「不能排名」。
現在終於不是先做一個看起來很酷的排名頁面,再回頭問那個數字從哪裡來。
我們先把尺做對,再開始量。