今まで、AppleMusicで再生している曲からtrackIDを取得出来なかった。
trackIDというのは、AppleMusicの曲の管理IDでこれが無いとMPMusicControllerで曲を指定して再生出来ない。
let player = MPMusicPlayerController.systemMusicPlayer()
player.setQueueWithStoreIDs([ "123456789", "987654321" ]) //これ
いま聴いている曲の iTunes Store での trackId を取得する旅
http://blog.nishimu.land/entry/2016/04/19/090000
しっくすえいと氏の検証によると、iOS9ではtrackIDを取得するすべは無かった。
僕もちょうど Miew という他人の聴いている音楽をその場で撮った動画とシェアするプチMusicVideoシェアSNSみたいなのを作っていて、そこでは
request("https://itunes.apple.com/search", method: HTTPMethod.get, parameters: searchQuery)
private var searchQuery: [String : Any] {
var term = ""
if let title = self.title, artist != "null" {
term += "\(title) "
}
if let artist = self.artist, artist != "null" {
term += "\(artist) "
}
if let albumTitle = self.albumTitle, artist != "null" {
term += "\(albumTitle) "
}
return ["term" : term,
"country" : "jp",
"media" : "music",
"entity" : "musicTrack",
"limit" : "1",
"lang" : "ja_jp",
"isStreamable" : true]
}
みたいな感じで、再生中に取得出来る曲名やアーティスト名をスペース区切りでクエリに詰めてレスポンスからtrackIDを取得するという方法を取っていた。(これが”旅”である…!)
僕達はTrackIDを探す旅をやめられそう。
タイトル回収。
ぼーっとMPMediaItemのヘッダを見ていると
iOS10.3からplaybackStoreID
というのが生えていた。
// Matches the id used by MPMusicPlayerController to enqueue store tracks
@available(iOS 10.3, *)
open var playbackStoreID: String { get }
一応検証した感じtrackIDと同じ値がStringで返ってくる。
localeとかの検証はしてないんだけど、とりあえずこれをtrackIDとして使って良いっぽい…?
追記
AppleMusicに無い曲は「0」が返ってきました。