Skip to content

Commit

Permalink
Add support for fetching songs by identifier
Browse files Browse the repository at this point in the history
  • Loading branch information
stevesoltys committed Dec 11, 2024
1 parent cc0ee1f commit e01baa5
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/main/kotlin/com/stevesoltys/applemusic/AppleMusic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.stevesoltys.applemusic.model.album.library.LibraryAlbumResponse
import com.stevesoltys.applemusic.model.artist.library.LibraryArtistResponse
import com.stevesoltys.applemusic.model.search.SearchResponse
import com.stevesoltys.applemusic.model.search.SearchResultType
import com.stevesoltys.applemusic.model.track.song.SongResponse
import com.stevesoltys.applemusic.model.track.song.library.LibrarySongResponse
import com.stevesoltys.applemusic.net.AppleMusicHttpException
import com.stevesoltys.applemusic.net.AppleMusicRetrofitBuilder
Expand Down Expand Up @@ -172,6 +173,29 @@ class AppleMusic(
)
}

/**
* Get a set of songs by their identifiers.
*/
fun getSongsById(
ids: Array<String>? = null,
isrcIds: Array<String>? = null,
include: Array<String>? = null,
localization: String? = null,
extend: Array<String>? = null
): SongResponse {

return call(
appleMusicService.getSongsById(
storefront = configuration.storefront,
ids = ids,
isrcIds = isrcIds,
include = include,
localization = localization,
extend = extend
)
)
}

/**
* Get all albums for a given artist.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.stevesoltys.applemusic.model.chart.ChartResponse
import com.stevesoltys.applemusic.model.album.library.LibraryAlbumResponse
import com.stevesoltys.applemusic.model.artist.library.LibraryArtistResponse
import com.stevesoltys.applemusic.model.search.SearchResponse
import com.stevesoltys.applemusic.model.track.song.SongResponse
import com.stevesoltys.applemusic.model.track.song.library.LibrarySongResponse
import retrofit2.Call
import retrofit2.http.GET
Expand Down Expand Up @@ -73,6 +74,25 @@ interface AppleMusicService {
@Query("limit") limit: Int? = null
): Call<AlbumResponse>

@GET("catalog/{storefront}/songs")
fun getSongsById(
@Path("storefront") storefront: String,
@Query("ids") ids: Array<String>? = null,
@Query("filter[isrc]") isrcIds: Array<String>? = null,
@Query("include") include: Array<String>? = null,
@Query("l") localization: String? = null,
@Query("extend") extend: Array<String>? = null
): Call<SongResponse>

@GET("catalog/{storefront}/songs")
fun getSongsByIsrcId(
@Path("storefront") storefront: String,
@Query("ids") ids: Array<String>,
@Query("include") include: Array<String>? = null,
@Query("l") localization: String? = null,
@Query("extend") extend: Array<String>? = null
): Call<SongResponse>

@GET("me/library/artists")
fun getLibraryArtists(
@Header("Music-User-Token") userToken: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,15 @@ class AppleMusicE2ETest {
artistAttributes.name shouldBe TEST_ALBUM_NAME
}

@Test
fun `can get songs by ISRC`() {
val result = appleMusic.getSongsById(
isrcIds = arrayOf("USQE92100257")
)

result.data.shouldNotBeNull().shouldHaveSize(1)
}

@Test
fun `can get top 100 album charts`() {
val result = appleMusic.getCatalogCharts(
Expand Down

0 comments on commit e01baa5

Please sign in to comment.