JSBox - Top Playlists
作为一个热衷于欧美音乐的人,只要在电脑前我就会刷一遍最近流行的音乐。而作为一名 Apple Music 用户,尤其是中区的用户,AM 没有像 Billboard 之类的榜单是十分遗憾的。此前,使用 Workflow 勉强满足了我的需求;而今天给大家分享的,是在 JSBox 上的解决方案,这将更完美地解决这一需求存在的问题。
分析
Top Playlists 的需求此前文章Workflow - Music Launcher已经赘述过了,这里就不再详述了,如果想要了解这是满足什么样的需求,请阅读此前的文章。简单而言 Top Playlists 是结合后端搜索的结果,减小「客户端」处理时的压力,从而在使用的角度上得到较快的响应速度。
如此前文章里的提要一样,后端处理没有太大的改动,而且这部分内容也不需要大家去了解。但如果以前有使用过 Music Launcher Workflow 的话,可能会发现今天分享的 JSBox 脚本增多了一项「QQ」榜单。这其实在使用 Workflow 的时候就已经有了,只是没有把它拿出来。这里简单介绍一下「QQ」这个榜单,其实就是 QQ 音乐的「巅峰榜·欧美」,当时加入仅仅是为了扩充歌库,当然现在也保持这一想法,毕竟这样的榜单是没有太大参考意义的。
与此前 Music Launcher Workflow 相同的子项相比而言,Top Playlists 使用 JSBox 的解决方案最突出的优势就是「快」。此前,我们需要折中地把 API 获得的 trackID
再在 Workflow 里搜索一遍才可播放;而现在,由于 JSBox 是以纯代码实现的,自由度相对更高一些,直接使用原生方法就可以把 trackID
「播放」出来,所以效率的提升是翻倍的。
实现
有使用 Telegram 并关注Flow/Script News频道的你或许已知道,Top Playlists.js
已经在频道上分享一段时间了。编写本文章是因为最近把它再完善了一些,并希望以此文章作为简单的介绍和使用说明。
- 同样的,在基础功能上保持原来(V1.1)的选择榜单、使用步进器选择播放范围、选择是否随机播放,并在 Main App 运行时可浏览后端搜索结果,进而快速地复制相关内容转至 AM 搜索(通过左滑动作)。
使用这样的界面主要是为了保证脚本能在 Widget 流畅运行,默认大家在大多数情况下都不需要选择播放范围。然而使用步进器进行大幅度选择操作仍然是十分痛苦的。
- 由于使用步进器的不便,本文章附件中提供的版本(V1.2)增加了「编辑」按钮,点击可以在键盘输入模式与步进器输入模式间切换。但需要注意的是,iOS 11 上 Widget 使用系统键盘会较频繁地出现奔溃,因此小范围的选择操作仍建议使用步进器完成,仅当需要选择的变化幅度较大时才唤起键盘。
- 此前版本请求 API 的方式比较粗暴,导致使用过程中等待响应的时间较长,而实际上反复请求 API 是不必要的,因此在本版本中加入了缓存策略,每天仅在数据刷新后才重新请求资源,从而达到了响应提速的效果。
- 本版本回归了原来的美区 Apple Music 服务支持,但考虑到为此增加配置方式是浪费的,所以如果各位有订阅美区 Apple Music 服务并需要使用此脚本的话,请进入代码编辑器内修改
COUNTRY
关键词为us
。代码内也附有注释,操作上应该没有难度。但是需要注意的是,更改后需要在 Main App 中运行并下拉才可更新缓存。 最后,提及一下本版本一些细小的变动,包括:
- Main App 运行时下拉可更新缓存;
- Main App 运行时长按榜单歌曲可以选择播放单首歌曲;
- Main App 运行时激活键盘输入模式加入了遮罩层,点击与「确认」等效;
- Widget、Main App 运行时样式的微小调整。
说明
因为本脚本是完全遵循本人自身使用习惯和需求设计的,所以在此说明一下合理的使用习惯:
- 绝大部分时间只需通过 Widget 运行即可,所有基础功能都能在 Widget 上操作;
每个榜单只分析了 Top 50,这在此前文章已说明原因。但是往往存在各种原因会导致并非所有结果都能成功搜索,当我想要研究榜单的时候,便在 Main App 中浏览搜索的结果,把一些喜欢的歌曲增添到 Apple Music 中。
- 对于一些感兴趣的歌曲,通过长按来播放。但为了避免因误操作而打断播放队列的问题,每次长按都需要确认方可播放;
- 对于一些没有搜索成功的结果,通过左滑操作复制歌曲信息来手动搜索。
- 有一个已知的严重问题,便是播放某些歌曲会使播放队列陷入子队列的无限循环中,表现为:播放到该歌曲时,当前队列会变成一个奇怪的子队列,播放的歌曲便随着队列的往复变化循环地播放着。所有有时候你会发现,你播放的是20首歌,但感觉听了一个下午都没有听完(没有开启循环播放模式),而且歌曲听着都是重复来重复去的。为此,我同时也使用了 Workflow 播放来研究此问题,最后得到的结果也一样,所以大致认为此问题是这种播放方式的一个 Bug,而且不知道有没有可以避免的方法。
- 最后再次提醒各位,这不是一个播放器,而是一个辅助脚本,任何歌曲的播放都依赖于 Apple Music(且必须是订阅者),所以请按需取用。
附件
JSBox:Top Playlists
V2.0 [2018-09-19 15:00]
- Siri Shortcuts support.
V1.7 [2018-04-26 19:30]
- Minor improvements.
V1.6 [2018-04-15 12:00]
- Minor fixes for alert view.
V1.5 [2018-03-31 20:30]
- Fixed an issue which may cause app crash.
V1.4 [2018-03-30 21:30]
- Fixed an issue of Shuffle Mode in iOS 11.3.
V1.3 [2018-02-10 19:00]
Requirement: 1.7.0 Build 79 and above
- Removed
async, await
syntax to support more devices.- Minor optimization.
V1.2 [2018-01-29 19:30]
- Added「Keyboard Input Mode」.
- Added cache strategy to speed up response.
- Added support for US Apple Music subscriber.
- Added pullDown to refresh cache.
- Added longPress to play a single music.
- Added background mask while inputing, tap and quickly confirm inputs.
- Minor adjustments for Widget and Main App display.
V1.1 [2018-01-13 20:30]
- Added ranking labels.
- Color follows App theme.
- Clear queue before playing.
如有问题,欢迎留言或邮件咨询