← 回成果库

环球旅行 · 当地音乐电台 / 音乐宝箱 / 音乐旅行背包 —— 交付报告


一、成品直达

入口完整链接
🧭 环球旅行游戏(主入口)https://metazero-terminal.pages.dev/travel-2d/rpg
🎵 音乐世界杯(新增各国热榜开赛)https://metazero-terminal.pages.dev/musiccup/

玩法(游戏里):

1. 走到任意城市附近 → 地图上出现粉色发光的 🎶 音乐宝箱(屏外有粉色箭头指路),点开 = 抽一首当地推荐歌,自动播 30 秒,可「🎒 收进旅行背包」。

2. 右侧按钮 📻 当地电台 或 进城面板里的 📻 区块 → 打开电台,三个频道随便切。

3. 顶栏 🎵 数字 = 背包里收藏了几首,点开看「我的世界歌单」(按国家分组、可回放、可分享)。

4. 播完自动下一首,关掉弹窗也继续放(左下角常驻迷你播放条,可暂停/下一首/收藏/关闭)。


二、做了什么(三块)

1. 📻 当地电台(每座城市都有,三个频道)

频道内容数据来源(真实接口)
🪕 地域特色(默认)这个国家的本土乐种:葡萄牙 fado、日本演歌/民謡/三味線、巴西 samba/bossa nova/forró、塞内加尔 mbalax/kora、南非 amapiano/mbaqanga、中国民乐/古筝/京剧…iTunes 曲库搜索 itunes.apple.com/search,每国配了真实乐种关键词表(共 170+ 个国家/地区)
🔥 本国热榜这个国家今天最火的 25 首(实时)Apple 官方每日榜 itunes.apple.com/{国家码}/rss/topsongs/limit=25/json
🏙️ 这座城唱到这座城的歌(如维也纳 → Vienna)iTunes 曲库按城市名搜索

每首都带 30 秒官方试听 + 专辑封面 + 跳去听全曲的链接

2. 🎶 音乐宝箱

城市附近随机生成(约 80% 的城市有一个),打开 = 从【地域特色】里随机抽一首当地歌,大封面 + 自动播放 + 一键收藏。抽不到本土乐种时依次退到热榜 → 这座城,永不空手。

3. 🎒 音乐旅行背包

localStorage 永久存档,记录:歌名/歌手/封面/试听/在哪座城、哪个国家收的/日期。面板按国家分组,统计「N 首歌 · 来自 M 个国家 / K 座城市」,可一键分享世界歌单;旅行战报(💰)里也自动多了一行音乐收藏。

4. 附送:音乐世界杯接上了同一个数据源

musiccup 新增「🌍 各国热歌世界杯」——35 个国家,点一下拉它今天的 Top 16 直接开赛(带真试听)。这就是主席问的「音乐库能不能按国家排热门歌」的直接可玩答案


三、主席那个问题的正面回答(带实测证据)

> 「音乐库能不能提供按国家来排序的最热门歌曲?」

能。 苹果有一个免费公开、不用钥匙、浏览器可直连的每日榜接口(2026-07-25 实测):

`

https://itunes.apple.com/{国家码}/rss/topsongs/limit=25/json

→ HTTP 200 · access-control-allow-origin: * · 每条带 30 秒试听音频

`

逐国实测结果(70 个国家码,2026-07-25):

我怎么处理这个坑(诚实优先): 弱榜国家自动借用同语区榜(中国大陆 → 台湾榜),或降级为曲库搜索,并且在面板上一行小字如实写明:

> ⚠️ 中华人民共和国 本地榜无公开数据,这里放的是 Taiwan 榜(同语区借用,如实标注)

绝不把台湾榜冒充成「中国榜」。韩国因为只有 4 条,直接不放进音乐世界杯的国家列表(避免点了没反应)。

一个更重要的发现(这也是我为什么加了「地域特色」频道):

热榜其实很全球化——今天 JENNIE 的《Less than a Lover》同时挂在巴西/墨西哥/泰国/越南/新加坡/阿根廷/智利/秘鲁/哥伦比亚的榜首,Shakira 挂在英/法/西/葡/捷克榜首。如果只做「按国家热榜」,主席想要的地域特色/国家特色其实拿不到,会变成「走到哪都听同一首歌」。所以真正的地域味在【地域特色】频道:用每个国家真实的本土乐种去挖曲库。


四、测试与验收(真跑,带证据)

工具:Chromium(Playwright)真开页面跑 JS,外部接口用 curl 走代理取真数据喂进页面(容器里浏览器直连代理被重置,故用此通道;数据本身是苹果官方真数据)。

检查项命令/动作结果
语法node --check radio.js / rpg.js✅ 通过
页面启动无崩溃Chromium 打开 rpg.html,抓 console/pageerror✅ 无实质报错,3689 座城市载入
🪕 地域特色逐国真拉葡/日/巴/塞内加尔/爱尔兰/印/南非/中国 各拉一遍✅ 24-30 首/国,拉到的是 Mariza(fado)、吉幾三/八代亜紀(演歌)、Seu Jorge/Caetano Veloso(samba/bossa)、N'dongo Lo(mbalax)、The Chieftains(爱尔兰传统)、Lata Mangeshkar、Kabza De Small(amapiano)、古筝名曲/京剧
🔥 热榜频道日/法/中✅ 25 首;中国正确显示「借用台湾榜」的诚实标注
🏙️ 这座城维也纳✅ 14 首(Vienna 相关)
🎶 音乐宝箱→收藏真点开、真收进背包✅ 抽到真歌+封面,播放条出现,背包计数 1
🎒 背包面板打开✅「🎵 1 首歌 · 来自 1 个国家 / 1 座城市」
进城面板入口cityPanel✅ 有电台块 + 3 个频道按钮
旅行战报tripShareText()✅ 多出「🎵 收藏当地音乐」一行
截图验收电台/宝箱/背包三张✅ 都看清了(封面、按钮、播放条都正常渲染)
上线验真curl 线上 URL + 对线上版本再跑一遍完整运行时测试✅ HTTP 200、radio.js 46932B、线上跑全绿
musiccup 各国热榜真点巴西✅ 拉到 25 首取 16 首开赛,4 张卡都有「▶ 试听30秒」

五、红队自审(我自己先挑刺)

最强反对我的回应
「30 秒试听不是完整电台,算什么电台?」属实,这是苹果免费接口的硬约束(不给全曲)。缓解:自动连播 25-30 首 = 连续 10-15 分钟背景音;每首都给「🎧 听全曲」跳 Apple Music。要真·全曲需要付费授权或换 YouTube 嵌入(可做,但会打断游戏画面)。
「本土乐种关键词是你选的,会不会有主观偏差?」会有。关键词是公认乐种名(fado/samba/mbalax/演歌…),但选哪几个是我的判断。为降低杂音,加了排序:曲风标签命中乐种名 +3、世界音乐/民谣类 +2、轻音乐/配乐类 -3,同一歌手最多 2 首。仍会偶有杂音(如搜 MPB 撞到 BGM 类曲目)。
「小城市没有国家字段,会不会认错国家?」会。2585 个小城市数据无国家字段,用「最近一个有国家名的城市」兜底(≤900km),面板上标注「(按最近国家判定)」。边境城市可能判到邻国。
「中国大陆用户能不能听?」试听音频域名是 audio-ssl.itunes.apple.com,大陆访问不稳定;榜单本身也无大陆数据。诚实结论:大陆网络下这个功能体验会打折。

可证伪锚点:如果 30 天后再测,itunes.apple.com/{cc}/rss/topsongs 接口若不再返回 access-control-allow-origin:* 或停服,本功能的热榜频道即失效(地域特色/这座城走 search 接口,独立)。届时的备选是 Deezer chart API 或 MusicBrainz+YouTube。


六、改了哪些文件

文件说明
web/terminal/travel-2d/radio.js🆕 新增(约 460 行):国家映射表(170+)+ 本土乐种关键词表 + 三频道取数 + 播放器 + 宝箱 + 背包
web/terminal/travel-2d/rpg.js加钩子:🎶 宝箱实体/点击/生成/箭头指路、进城面板电台块、战报音乐行
web/terminal/travel-2d/rpg.html加载 radio.js、顶栏 🎵 收藏计数、📻 当地电台按钮
web/terminal/musiccup/index.html新增「🌍 各国热歌世界杯」35 国实时榜开赛

数据等级:热榜与曲目 = E1(苹果官方接口实时返回,2026-07-25 实测);本土乐种关键词表 = 我的整理(公认乐种名,非编造数据);榜单可用性逐国清单 = E1(70 国实测)。