Swift MusicKitプログラミング その8
Swift MusicKitプログラミング その8
with(_:)
MusicCatalogSearchRequestでArtistを取得。
しかし、albums/fullAlbums/liveAlbums/singles/playlistsがnilで取得出来ていない。
with(_:)使用して取得する必要があります。
typesは複数指定可能です。
Home Pageより
指定されたプロパティを含むミュージックアイテムの新しいインスタンスをロードする。
Task() { print("\nExample 8 --------------------") let request = MusicCatalogSearchRequest(term: "氷室京介", types: [Artist.self]) print(request.term.debugDescription) let response = try await request.response() if let artist = response.artists.first { print("artist:\(artist.fullAlbums?.count)") let withArtist = try await artist.with([.fullAlbums]) print("withArtist: \(withArtist.fullAlbums?.count)") } }
"氷室京介" artist:nil withArtist: Optional(10)
with(_:)取得対象
PartialMusicPropertyのドキュメントで確認出来ます。
上記コードの場合、
static let fullAlbums: MusicRelationshipProperty
An identifier for the association property that returns a collection of the artist’s full-release albums.
Available when Root is Artist.
になります。
注意点
with(_:)も一度で全ては取得出来ない。
「氷室京介」「.fullAlbums」は全13アルバムありますが、上記コードで取得出来た数は10です。
Swift MusicKitプログラミング その7の方法(nextBatch(limit:))で取得する必要があります。
疑問
with(_:)にはLimitがありません。
では、一度にいくつ取得出来るのか?疑問になります。
試してみました。
下記の場合、liveAlbumsとplaylistsは少ないので考察から除外。
albums:25で続きあり
fullalbums:10で続きあり
singles:10で続きあり
不思議なことにalbumsは25なのに、他は10なので。
他のArtistでやってみましたが、結果は同じでした。
不思議な仕様です。
Apple Music APIの仕様なのかもしれませんが、確認出来ていません。
Task() { print("\nExample 7 --------------------") let request = MusicCatalogSearchRequest(term: "氷室京介", types: [Artist.self]) print(request.term.debugDescription) let response = try await request.response() if let artist = response.artists.first { let withArtist = try await artist.with([.albums, .fullAlbums, .liveAlbums, .singles, .playlists]) print("albums") print(withArtist.albums?.count) print(withArtist.albums?.hasNextBatch) print("fullAlbums") print(withArtist.fullAlbums?.count) print(withArtist.fullAlbums?.hasNextBatch) print("liveAlbums") print(withArtist.liveAlbums?.count) print(withArtist.liveAlbums?.hasNextBatch) print("singles") print(withArtist.singles?.count) print(withArtist.singles?.hasNextBatch) print("playlists") print(withArtist.playlists?.count) print(withArtist.playlists?.hasNextBatch) } }
albums Optional(25) Optional(true) fullAlbums Optional(10) Optional(true) liveAlbums Optional(2) Optional(false) singles Optional(10) Optional(true) playlists Optional(3) Optional(false)