iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
ChatGPT & Codex

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

Day 13|如果播放秒數比不了,還能比較什麼?我終於算出第一個本人跨平台位置

  • 分享至 

  • xImage
  •  

前一篇做到最後,我遇到了一個很尷尬的問題。
我已經把 ListenBrainz 的真實 YOASOBI 聽眾資料接進程式,也把自己的 YouTube Music 紀錄放進去,但兩邊不能直接比較。
原因很簡單:
YouTube Music Takeout 告訴我的,是「某個時間點出現了一筆播放活動」。
但它沒有告訴我實際播放多久。
所以即使某一筆紀錄確定是 YOASOBI,我也不能直接把它當成一次完整收聽,更不能拿它去和 ListenBrainz 的 submitted listen 數量硬比。
如果就停在這裡,今天的成果就只會變成:
「資料不能比。」
但這離我一開始想做的 Music Recap 還太遠。
所以今天我決定繼續往下挖。
先把自己的 YOASOBI 紀錄再補完整一點
目前比較的期間先固定在:
2026/08/01 00:00 UTC ~ 2026/09/01 00:00 UTC
這和目前 ListenBrainz 月度 benchmark 的時間範圍一致。
在這個區間裡,我的 YouTube Music Takeout 一共有:

  • 2,215 筆音樂活動
  • 原本 49 筆已確認屬於 YOASOBI
  • 2,166 筆仍然 unresolved
  • 所有活動的實際播放時間仍然是 null
    49 筆實在太少。
    但我也不能因為看到頻道叫做 YOASOBI - Topic,就直接把所有紀錄全部塞進 YOASOBI。
    這幾天一直遵守的規則還是一樣:
    頻道名稱不是藝人身分證明。
    所以這次我不是再隨便挑幾首歌曲做示範,而是直接從八月實際出現的 source ID 下手,優先處理會影響最多活動的項目。
    最後新增查證了 6 個 source ID。
    這 6 個 ID 一共影響:
    87 筆真實活動。
    把新的藝人署名證據重新套回原始事件之後:
    狀態 原本 這次
    confirmed YOASOBI 49 136
    unresolved 2,166 2,079
    excluded 0 0
    總活動 2,215 2,215

所以這次不是單純把舊的 49 再印一次。
我實際把 confirmed YOASOBI 活動從:
49 筆增加到 136 筆。
不過這裡還是要強調:
136 是目前有證據支持的 YOASOBI 活動下限。
它不是「我八月只聽了 YOASOBI 136 次」,也不是「完整播放 136 次」。
剩下的 2,079 筆 unresolved 裡,仍然可能存在還沒確認的 YOASOBI 紀錄。
接下來真的去抓外部帳號的逐筆紀錄
前面的 ListenBrainz 月度資料告訴我:
2026 年 8 月 YOASOBI 的統計裡:

  • 來源回報 2,189 個帳號
  • 28,249 個 listens
  • API 回應實際列出了 9 個帳號
    前面我只拿到這 9 個帳號的 aggregate 分數。
    這次我要的不是再看一次排行榜數字。
    而是實際去抓:
    這 9 個帳號在 2026 年 8 月的逐筆 ListenBrainz 紀錄。
    而且在開始抓之前,這 9 個帳號名單就先固定。
    不能抓到後面發現某個人資料不好處理,就偷偷把他刪掉。
    最後:
    9 / 9 個帳號全部完成 bounded listening records 擷取。
    也就是每一個帳號都真的往前翻到超過 2026/08/01 的時間邊界。
    這一點很重要。
    如果只抓到最新一頁,再發現某人八月沒有資料,就直接算 0,那排名會非常容易做錯。
    我特別檢查了逐筆 ListenBrainz 到底有沒有播放秒數
    抓到逐筆資料之後,我先檢查幾個我最在意的欄位:
  • listened_at
  • artist
  • artist MBID
  • duration_played
  • duration
  • duration_ms
  • music_service
  • submission_client
    結果有一件事再次確認了:
    這批資料裡沒有觀察到 duration_played。
    有些資料有 duration 或 duration_ms。
    但那是歌曲本身的長度資訊。
    歌曲長 240 秒,不代表使用者真的聽了 240 秒。
    所以我沒有因為現在缺秒數,就把 duration 塞進 actual listening time。
    也就是說,最初那條:
    「我的 YouTube Music activity count vs ListenBrainz submitted listen count」
    目前仍然不能直接比較。
    這個限制沒有被刪掉。
    那還能比什麼?
    這時候我改了一個問題。
    既然兩邊都有時間戳,而且都可以知道某一天有沒有出現 YOASOBI 的紀錄,那能不能先比較:
    2026 年 8 月裡,有幾個日期至少出現一次已確認 YOASOBI 紀錄?

注意,這已經是一個比較窄的問題。
我不是在問:
「誰聽 YOASOBI 最久?」
也不是:
「誰播放次數最多?」
更不是:
「誰是全球最狂粉絲?」
我現在比較的是:
days with observed YOASOBI records
也就是「有觀察到 YOASOBI 紀錄的日期數」。
我的結果:30 天
用目前已確認的 136 筆 YOASOBI 活動回頭看日期:
2026 年 8 月的 31 天裡,
我的檔案有:
30 天至少出現一筆 confirmed YOASOBI 活動。
換句話說:
我提供的這份 YouTube Music 紀錄裡,八月幾乎每天都有 YOASOBI。
接著把外部 9 個 ListenBrainz 帳號用完全相同的 UTC 月份切法計算。
結果如下:
外部帳號 有 YOASOBI 紀錄的日期數
dirtymaskz 31
meze 31
Ind-E 28
Nubinator 27
Aria_Shadeslayer_PC 25
rafeedoo 23
RoyalGuard 23
giggxkie 22
deno8bits 10

我的結果是:
30 天。
第一個真正的本人比較結果出現了
把我也放進這個固定群體後:
總共是:
10 份 record sets
其中比我 30 天更多的只有兩個帳號:

  • 31 天
  • 31 天
    所以依照 competition ranking:
    我的 supplied file 結果是第 3 / 10。
    這是這個 Music Recap 專案到目前為止,第一次真正把:
    我的真實 YouTube Music 紀錄
    接到
    真實外部使用者紀錄
    再算出
    一個有明確定義的位置。
    但為什麼最後又寫成第 1~3?
    這裡還有一個不能假裝不存在的問題。
    我的 Google Takeout 並沒有告訴我:
    「這份資料保證完整包含八月每一次音樂播放。」
    例如:
    8 月 24 日
    在目前這份 supplied file 裡,整天連一筆音樂活動都沒有。
    這可能代表我那天真的沒有聽音樂。
    也可能只是這份紀錄沒有完整留下那一天。
    目前沒有證據可以決定是哪一個。
    所以不能因為檔案裡沒有,就直接宣稱:
    「8 月 24 日你一定沒有聽 YOASOBI。」
    如果那一天其實也有 YOASOBI 紀錄,那我的日期數就會從:
    30 天
    變成:
    31 天。
    而 31 天就會和目前最高的兩個帳號並列。
    因此更完整的結果應該寫成:
    目前 supplied file 的實際觀測位置:第 3 / 10。
    考慮本人歷史完整性尚未證明:
    位置界限:第 1~3。
    這個「範圍」不是為了模糊結果。
    反而是因為有一個很明確的未知日期,所以把不確定性保留下來。
    那 YouTube Music 夏季 Recap 的 30,910 分鐘呢?
    今天我也拿到了自己的 YouTube Music 夏季 Recap。
    其中顯示:
    6~8 月總聆聽時間 30,910 分鐘。
    這個數字非常有價值,因為它是 YouTube Music 官方自己的摘要。
    但它代表的是:
    整個夏季、所有音樂的總聆聽時間。
    它沒有告訴我:
  • 其中多少分鐘是 YOASOBI
  • 八月單月多少分鐘
  • 每一次播放的實際 duration
    所以我把它保留成官方摘要證據,但沒有把 30,910 分鐘硬拆成八月 YOASOBI 分鐘。
    今天真正完成了什麼?
    原本今天做到一半時,我得到的是:
    「YouTube Music activity 和 ListenBrainz listen 不能直接比較。」
    如果停在那裡,其實還只是個負面結論。
    但繼續做下去後,我現在已經有:
    我的真實八月 YouTube Music 資料
    → 實際 source ID 藝人補證
    → 136 筆 confirmed YOASOBI activities
    → 30 個 confirmed recorded days
    → 固定的 9 個外部 ListenBrainz 帳號
    → 9 / 9 完成逐筆 bounded records 擷取
    → 每個帳號的 YOASOBI recorded days
    → 本人觀測位置第 3 / 10
    → 完整性不確定下的位置界限第 1~3
    這才是我想要的第一個「真的算出東西」的跨平台比較。
    這個結果還不能叫全球排名
    現在最容易犯的錯,就是看到第 3 / 10 很漂亮,就寫成:
    「我是全球 YOASOBI 前幾名聽眾。」
    完全不行。
    這 9 個帳號只是 ListenBrainz 某個月度回應當時實際返回的帳號。
    它不代表:
  • ListenBrainz 全部 2,189 個帳號
  • Spotify 使用者
  • YouTube Music 使用者
  • Apple Music 使用者
  • 全球所有 YOASOBI 聽眾
  • 全球自然人
    而且目前比較的也只是:
    有 YOASOBI 紀錄的日期數。
    不是播放時間。
    不是 submitted listen 次數。
    不是完整播放次數。
    所以目前最準確的描述是:
    在這個事先固定的 9 個 ListenBrainz 帳號,加上我的 YouTube Music supplied record set 所形成的有限比較中,我在 2026 年 8 月有 30 個日期出現已確認 YOASOBI 紀錄,觀測位置為第 3 / 10;考慮本人歷史完整性尚未證明,位置界限為第 1~3。

句子很長。
但它是真的。
下一步
現在至少證明了一件事:
跨平台 Music Recap 不一定只能在「播放次數」和「播放分鐘」兩條路裡二選一。
當平台留下的資料不同時,可以先找到一個雙方都真正觀測得到、而且定義能說清楚的共同指標。
今天找到的第一個就是:
YOASOBI Recorded Days。
它還不是我要的最終全球聆聽排名。
但它已經不再只是資料格式、schema 或「理論上可以」。
它是一個真的拿我的資料與外部真實使用者資料算出來的結果。
而這也是目前整個 Music Recap 專案第一次真正看到:
我的紀錄,開始在平台外有位置了。


上一篇
Day 12|同名不等於同一首:怎麼判斷一筆播放紀錄到底屬於誰?
下一篇
Day 14|從 9 個帳號到 25 個:讓 Music Recap 終於能自己操作
系列文
我的音樂不該被平台綁架:30 天用 ChatGPT × Codex 打造跨平台 Music Recap 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言