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)

Swift

Posted by shi-n