LoginSignup
8
5

More than 5 years have passed since last update.

僕達はTrackIDを探す旅をやめられそう。

Last updated at Posted at 2017-07-20

今まで、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」が返ってきました。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5