iOS开发:如何通过ISRC借助MusicKit查询Apple Music歌曲?
通过ISRC查询Apple Music/iTunes歌曲的两种可行方案
好问题!我刚好在几个iOS项目里处理过类似的需求,给你详细拆解两种靠谱的实现方案,帮你快速达成目标:
一、使用Apple MusicKit SDK直接查询
从iOS 15开始,MusicKit已经支持通过ISRC作为搜索关键词来查找对应歌曲了,不需要先转成Apple Music ID。核心思路是用MusicCatalogSearchRequest,把ISRC作为搜索词,并指定搜索类型为歌曲,具体代码示例如下:
import MusicKit /// 通过ISRC查询Apple Music歌曲 func fetchSongByISRC(isrc: String) async throws -> Song? { // 构建搜索请求:搜索词为ISRC,仅搜索歌曲类型 let searchRequest = MusicCatalogSearchRequest(term: isrc, types: [Song.self]) // 发起异步请求 let searchResponse = try await searchRequest.response() // 返回第一个匹配的歌曲(ISRC是唯一标识,通常只会有一个结果) return searchResponse.songs.first }
注意事项:
- 需要先配置MusicKit授权:在
Info.plist中添加NSAppleMusicUsageDescription权限描述,并且在代码中请求用户授权(MusicAuthorization.request())。 - ISRC必须完全匹配,所以确保你获取的ISRC没有格式错误(比如多余的空格或符号)。
- 如果查询到结果,返回的
Song对象包含所有MusicKit支持的属性,直接用于后续的播放、添加到库等操作非常方便。
二、使用iTunes Search API查询
如果你不想依赖MusicKit授权,或者需要更轻量化的查询方式,iTunes Search API是个不错的选择。它支持直接通过ISRC作为查询条件,返回对应的iTunes歌曲信息,其中包含trackId(可以后续用于MusicKit的查询)。
代码示例:
import Foundation // 定义解码模型,适配iTunes Search的返回结构 struct ITunesSearchResponse: Codable { let results: [ITunesSong] } struct ITunesSong: Codable { let trackId: Int let trackName: String let artistName: String let isrc: String? // 根据需求添加其他字段,比如专辑名、封面URL等 } /// 通过ISRC查询iTunes歌曲 func fetchSongFromITunesByISRC(isrc: String) async throws -> ITunesSong? { guard let encodedISRC = isrc.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), let url = URL(string: "https://itunes.apple.com/search?term=\(encodedISRC)&entity=song&attribute=isrc") else { throw NSError(domain: "ISRCQueryError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的查询URL"]) } let (data, _) = try await URLSession.shared.data(from: url) let response = try JSONDecoder().decode(ITunesSearchResponse.self, from: data) // 返回第一个匹配的结果 return response.results.first }
优势:
- 不需要用户授权,直接发起HTTP请求即可。
- 返回的
trackId可以直接传入MusicKit的MusicCatalogResourceRequest来获取完整的Song对象,实现和MusicKit的衔接。 - 支持多地区查询,可以通过添加
country参数指定目标地区(比如&country=US)。
方案选择建议
- 如果你的应用需要深度集成Apple Music功能(比如播放、收藏、创建播放列表),优先选择MusicKit方案,查询后的
Song可以直接用于所有MusicKit操作。 - 如果只是需要获取歌曲的基础信息,或者不想处理用户授权流程,iTunes Search API更轻便灵活。
内容的提问来源于stack exchange,提问作者Tom Oakley
相关产品推荐
相关产品推荐

