You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:54:09