From 04fee12fa47199752e34b570039d508c1b3f3108 Mon Sep 17 00:00:00 2001 From: aj Date: Tue, 7 May 2019 17:36:18 +0100 Subject: [PATCH] implementing get top albums and artists --- .../sarsoo/fmframework/fm/FmUserNetwork.java | 95 ++++++++++++++++++- .../fmframework/fm/FmUserNetworkTest.java | 17 ++++ 2 files changed, 111 insertions(+), 1 deletion(-) diff --git a/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java b/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java index 779288d..752eef6 100644 --- a/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java +++ b/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java @@ -232,6 +232,99 @@ public class FmUserNetwork extends FmNetwork { } + public FMObjList getTopAlbums(String period, int number) { + + Logger.getLog().log(new LogEntry("getTopAlbums").addArg(period).addArg(Integer.toString(number))); + + int limit = 50; + + int pages = 0; + + System.out.println(number / limit); + if ((double) number % (double) limit != 0) { + pages = (number / limit) + 1; + } else { + pages = number / limit; + } + + FMObjList albums = new FMObjList(); + int counter; + for (counter = 0; counter < pages; counter++) { + + HashMap parameters = new HashMap(); + + parameters.put("user", userName); + parameters.put("period", period); + parameters.put("limit", Integer.toString(limit)); + parameters.put("page", Integer.toString(counter + 1)); + + JSONObject obj = makeGetRequest("user.gettopalbums", parameters); + + JSONArray albumsJson = obj.getJSONObject("topalbums").getJSONArray("album"); + + for (int i = 0; i < albumsJson.length(); i++) { + JSONObject json = (JSONObject) albumsJson.get(i); + + if (albums.size() < number) { + Artist artist = new ArtistBuilder(json.getJSONObject("artist").getString("name")).build(); + Album album = new AlbumBuilder(json.getString("name"), artist) + .setUserPlayCount(json.getInt("playcount")).build(); + + albums.add(album); + + } + } + } + + return albums; + } + + public FMObjList getTopArtists(String period, int number) { + + Logger.getLog().log(new LogEntry("getTopArtists").addArg(period).addArg(Integer.toString(number))); + + int limit = 50; + + int pages = 0; + + System.out.println(number / limit); + if ((double) number % (double) limit != 0) { + pages = (number / limit) + 1; + } else { + pages = number / limit; + } + + FMObjList artists = new FMObjList(); + int counter; + for (counter = 0; counter < pages; counter++) { + + HashMap parameters = new HashMap(); + + parameters.put("user", userName); + parameters.put("period", period); + parameters.put("limit", Integer.toString(limit)); + parameters.put("page", Integer.toString(counter + 1)); + + JSONObject obj = makeGetRequest("user.gettopartists", parameters); + + JSONArray artistsJson = obj.getJSONObject("topartists").getJSONArray("artist"); + + for (int i = 0; i < artistsJson.length(); i++) { + JSONObject json = (JSONObject) artistsJson.get(i); + + if (artists.size() < number) { + Artist artist = new ArtistBuilder(json.getString("name")) + .setUserPlayCount(json.getInt("playcount")).build(); + + artists.add(artist); + + } + } + } + + return artists; + } + public Artist getArtistTracks(String artistName) { return getArtistTracks(getArtist(artistName)); } @@ -266,7 +359,7 @@ public class FmUserNetwork extends FmNetwork { JSONObject scrob = returnedScrobbles.getJSONObject(i); } - }else { + } else { done = true; } diff --git a/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java b/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java index bd4edcc..b8f8e1f 100644 --- a/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java +++ b/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import sarsoo.fmframework.music.Scrobble; import sarsoo.fmframework.net.Key; +import sarsoo.fmframework.util.FMObjList; import static org.junit.Assert.*; @@ -29,4 +30,20 @@ public class FmUserNetworkTest { System.out.println(scrobbles.size()); assertNotNull(1); } + + @Test + public void testGetTopAlbums() { + FmUserNetwork net = new FmUserNetwork(Key.getKey(), "sarsoo"); + FMObjList list = net.getTopAlbums("7day", 15); + list.stream().forEach(System.out::println); + assertEquals(15, list.size()); + } + + @Test + public void testGetTopArtists() { + FmUserNetwork net = new FmUserNetwork(Key.getKey(), "sarsoo"); + FMObjList list = net.getTopArtists("7day", 15); + list.stream().forEach(System.out::println); + assertEquals(15, list.size()); + } }