Apple Music API を使用して、ライブラリ内のすべてのアーティストを取得できました。
func getArtists(forToken musicUserToken: String) {
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "api.music.apple.com"
urlComponents.path = "/v1/me/library/artists"
var request = URLRequest(url: urlComponents.url!)
request.setValue("Bearer (developerToken)", forHTTPHeaderField: "Authorization")
request.setValue(musicUserToken, forHTTPHeaderField: "Music-User-Token")
let dataTask = URLSession.shared.dataTask(with: request) { (data, urlResponse, error) in
...
}
dataTask.resume()
}
たとえば、上記のコードは次の JSON を返します。
{
"data":[
{
"attributes":{
"name":"Anne-Marie"
},
"href":"/v1/me/library/artists/r.wb9aRPu",
"id":"r.wb9aRPu",
"type":"library-artists"
},
{
"attributes":{
"name":"Bruno Mars"
},
"href":"/v1/me/library/artists/r.zCrRBIw",
"id":"r.zCrRBIw",
"type":"library-artists"
},
...
]
}
しかし、各オブジェクトが Apple Music ライブラリのアーティストではなく、私のライブラリのアーティストを参照しているように思えます。アーティストを取得id
して、このアーティストのアルバムを取得しようとしても、何も見つからないからです。たとえば、URL への GEThttps://api.music.apple.com/v1/catalog/us/artists/r.wb9aRPu
はエラーを返します。
{
"errors":[
{
"id":"GJXVG3NROYGJPDRECZLCPYKLEQ",
"title":"Internal Service Error",
"status":"500",
"code":"50000"
}
]
}
しかし、アーティスト ID 178834 (Apple の Web サイトの例から取得したもの) に対して同じ GET を実行すると、正しい応答が返されます。
{
"data":[
{
"id":"178834",
"type":"artists",
"href":"/v1/catalog/us/artists/178834",
"attributes":{
"name":"Bruce Springsteen",
"genreNames":[
"Rock"
],
"url":"https://itunes.apple.com/us/artist/bruce-springsteen/178834"
},
"relationships":{
"albums":{
"data":[
{
"id":"1136909069",
"type":"albums",
"href":"/v1/catalog/us/albums/1136909069"
},
{
"id":"1134170183",
"type":"albums",
"href":"/v1/catalog/us/albums/1134170183"
},
...
],
"href":"/v1/catalog/us/artists/178834/albums",
"next":"/v1/catalog/us/artists/178834/albums?offset=144"
}
}
}
]
}
私がやりたいことは、ユーザーが自分のライブラリに持っているすべてのアーティストからすべてのアルバムを取得することです。/me/library/artists
しかし、返されたアーティスト ID ではこれを行うことができません。では、ユーザーがライブラリに持っているアーティストのアーティスト ID を取得する別の方法はありますか?