diff --git a/src/main/java/sarsoo/spotframework/spotify/SpotNetwork.java b/src/main/java/sarsoo/spotframework/spotify/SpotNetwork.java index 9dadfbc..c050f1a 100644 --- a/src/main/java/sarsoo/spotframework/spotify/SpotNetwork.java +++ b/src/main/java/sarsoo/spotframework/spotify/SpotNetwork.java @@ -52,8 +52,9 @@ public class SpotNetwork { } public ArrayList getPlaylistTracks(String playlistId) { - List list = makePagedGetRequest(String.format("https://api.spotify.com/v1/playlists/%s/tracks", playlistId)); - + List list = makePagedGetRequest( + String.format("https://api.spotify.com/v1/playlists/%s/tracks", playlistId)); + ArrayList tracks = new ArrayList<>(); list.stream().forEach(t -> tracks.add(parsePlaylistTrack(t))); @@ -61,6 +62,16 @@ public class SpotNetwork { return tracks; } + public ArrayList getLibrary() { + List list = makePagedGetRequest("https://api.spotify.com/v1/me/albums"); + + ArrayList albums = new ArrayList<>(); + + list.stream().forEach(t -> albums.add(parseSimplifiedAlbum(t.getJSONObject("album")))); + + return albums; + } + private ArrayList makePagedGetRequest(String url) { HttpRequest request; @@ -213,6 +224,17 @@ public class SpotNetwork { Album album = new Album(object.getString("name"), object.getString("id"), object.getString("uri"), object.getString("href"), type, artists); + try { + ArrayList tracks = new ArrayList<>(); + + object.getJSONObject("tracks").getJSONArray("items").forEach(t -> tracks.add(parseTrack((JSONObject) t))); + + album.setTracks(tracks); + + } catch (JSONException e) { + System.out.println("no tracks"); + } + return album; } @@ -222,7 +244,7 @@ public class SpotNetwork { } private PlaylistTrack parsePlaylistTrack(JSONObject object) { - + JSONObject trackObj = object.getJSONObject("track"); Album album = parseSimplifiedAlbum(trackObj.getJSONObject("album")); @@ -238,8 +260,35 @@ public class SpotNetwork { PlaylistTrack track = new PlaylistTrack(trackObj.getString("name"), trackObj.getString("id"), trackObj.getString("uri"), trackObj.getString("href"), album, - LocalDateTime.ofInstant(Instant.parse(object.getString("added_at")), ZoneId.systemDefault()), parseUser(object.getJSONObject("added_by")), - trackObj.getBoolean("is_local"), artists); + LocalDateTime.ofInstant(Instant.parse(object.getString("added_at")), ZoneId.systemDefault()), + parseUser(object.getJSONObject("added_by")), trackObj.getBoolean("is_local"), artists); + + return track; + } + + private Track parseTrack(JSONObject object) { + + JSONObject trackObj = object.getJSONObject("track"); + + Album album = null; + + try { + album = parseSimplifiedAlbum(trackObj.getJSONObject("album")); + } catch (JSONException e) { + System.out.println("no album"); + + } + ArrayList artists = new ArrayList<>(); + + JSONArray artistObj = trackObj.getJSONArray("artists"); + + for (Object i : artistObj) { + JSONObject artist = (JSONObject) i; + artists.add(parseSimplifiedArtist(artist)); + } + + Track track = new Track(trackObj.getString("name"), trackObj.getString("id"), trackObj.getString("uri"), + trackObj.getString("href"), album, artists); return track; } diff --git a/src/test/java/sarsoo/spotframework/spotify/SpotNetworkTest.java b/src/test/java/sarsoo/spotframework/spotify/SpotNetworkTest.java index ba4cb26..8d01a63 100644 --- a/src/test/java/sarsoo/spotframework/spotify/SpotNetworkTest.java +++ b/src/test/java/sarsoo/spotframework/spotify/SpotNetworkTest.java @@ -7,6 +7,7 @@ import java.util.Scanner; import org.junit.jupiter.api.Test; +import sarsoo.spotframework.model.Album; import sarsoo.spotframework.model.Playlist; import sarsoo.spotframework.model.PlaylistTrack; @@ -18,15 +19,23 @@ class SpotNetworkTest { Scanner scan = new Scanner(System.in); SpotNetwork net = new SpotNetwork(scan.nextLine()); - ArrayList playlists = net.getUserPlaylists(); +// ArrayList playlists = net.getUserPlaylists(); - ArrayList tracks = net.getPlaylistTracks(playlists.get(0).getId()); +// ArrayList tracks = net.getPlaylistTracks(playlists.get(0).getId()); - tracks.stream().forEach(t -> System.out.println(t.getAddedAt())); +// tracks.stream().forEach(t -> System.out.println(t.getAddedAt())); - System.out.println(tracks.size()); +// System.out.println(tracks.size()); // .stream().forEach(System.out::println); + ArrayList albums = net.getLibrary(); + +// albums.stream().forEach(System.out::println); + + albums.get(50).getTracks().stream().forEach(System.out::println); + + System.out.println(albums.size()); + scan.close(); assertTrue(true); }