From a1e8ba6d27f5d9496c3d389861c963d0a5e51295 Mon Sep 17 00:00:00 2001 From: Donald Shan Date: Mon, 5 Dec 2022 15:04:55 -0800 Subject: Add files via upload --- src/main/java/utility/SpotifyAPI.java | 99 +++++++++++++++++++++++++++++++++++ src/main/java/utility/URLChecker.java | 31 +++++++++++ 2 files changed, 130 insertions(+) create mode 100644 src/main/java/utility/SpotifyAPI.java create mode 100644 src/main/java/utility/URLChecker.java (limited to 'src/main/java/utility') diff --git a/src/main/java/utility/SpotifyAPI.java b/src/main/java/utility/SpotifyAPI.java new file mode 100644 index 0000000..74b792e --- /dev/null +++ b/src/main/java/utility/SpotifyAPI.java @@ -0,0 +1,99 @@ +package utility; + +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import se.michaelthelin.spotify.SpotifyApi; +import se.michaelthelin.spotify.model_objects.credentials.ClientCredentials; +import se.michaelthelin.spotify.model_objects.specification.ArtistSimplified; +import se.michaelthelin.spotify.model_objects.specification.Playlist; +import se.michaelthelin.spotify.model_objects.specification.PlaylistTrack; +import se.michaelthelin.spotify.model_objects.specification.Track; +import se.michaelthelin.spotify.requests.authorization.client_credentials.ClientCredentialsRequest; +import se.michaelthelin.spotify.requests.data.playlists.GetPlaylistRequest; +import se.michaelthelin.spotify.requests.data.tracks.GetTrackRequest; +import java.io.FileReader; +import java.time.Instant; +import java.util.concurrent.CancellationException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; +public class SpotifyAPI { + private static final String clientId = readSetting("spotifyClientID"); + private static final String clientSecret = readSetting("spotifyClientSecret"); + + public static String spotifyapiKey = ""; + public static long lastRefresh = 0; + private static final SpotifyApi spotifyApi = new SpotifyApi.Builder() + .setClientId(clientId) + .setClientSecret(clientSecret) + .build(); + private static final ClientCredentialsRequest clientCredentialsRequest = spotifyApi.clientCredentials() + .build(); + + + public SpotifyAPI(){ + this.spotifyapiKey = readSetting("spotifyApi"); + } + public static String getSearchTerm_sync(String trackid) { + checkRefreshToken(); + String searchQuery = ""; + try { + GetTrackRequest getTrackRequest = spotifyApi.getTrack(trackid) +// .market(CountryCode.SE) + .build(); + final Track track = getTrackRequest.execute(); + searchQuery = track.getName(); + ArtistSimplified[] artists = track.getArtists(); + for (int i = 0;i< artists.length;i++){ + searchQuery = searchQuery + " "+artists[i].getName(); + } + System.out.println(searchQuery); + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + } + return searchQuery; + + } + public static String getPlaylist_Sync(String playlistId) { + checkRefreshToken(); + GetPlaylistRequest getPlaylistRequest = spotifyApi.getPlaylist(playlistId).build(); + try { + Playlist playlist = getPlaylistRequest.execute(); + PlaylistTrack[] tracks = playlist.getTracks().getItems(); + //pick a random track and return it + int randomTrack = (int) (Math.random() * tracks.length); + System.out.println(tracks[randomTrack].getTrack().getId()); + return tracks[randomTrack].getTrack().getId(); + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + } + return ""; + } + public static void clientCredentials_Sync() { + try { + final ClientCredentials clientCredentials = clientCredentialsRequest.execute(); + spotifyApi.setAccessToken(clientCredentials.getAccessToken()); + System.out.println("Expires in: " + clientCredentials.getExpiresIn()); + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + } + } + public static String readSetting(String parameter){ + Object obj = null; + try { + obj = new JSONParser().parse(new FileReader("settings//config.json")); + } catch (Exception e) { + e.printStackTrace(); + } + JSONObject jo = (JSONObject) obj; + return (String) jo.get(parameter); + } + public static void checkRefreshToken(){ + long unixTime = Instant.now().getEpochSecond(); + if(lastRefresh + 3600 <= unixTime){ + System.out.println("Spotify Token is expired, refreshing"); + clientCredentials_Sync(); + lastRefresh = Instant.now().getEpochSecond(); + } + } + +} diff --git a/src/main/java/utility/URLChecker.java b/src/main/java/utility/URLChecker.java new file mode 100644 index 0000000..ffea53b --- /dev/null +++ b/src/main/java/utility/URLChecker.java @@ -0,0 +1,31 @@ +package utility; + +public class URLChecker { + public boolean isURL(String term){ + return term.matches("^(http|https)://.*"); + } + public String getURLType(String url) { + if (url.matches("^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube(-nocookie)?\\.com|youtu.be))(\\/(?:[\\w\\-]+\\?v=|embed\\/|v\\/)?)([\\w\\-]+)(\\S+)?$")) { + return "yt"; //Youtube + } else if (url.matches("^(https?:\\/\\/)?(www.)?(m\\.)?soundcloud\\.com\\/[\\w\\-\\.]+(\\/)+[\\w\\-\\.]+/?$")) { + return "snd"; + } else if (url.matches("^(?:https?:\\/\\/)?(?:www\\.|go\\.)?twitch\\.tv\\/([a-z0-9_]+)($|\\?)")) { + return "twitch"; + } else if (url.split("\\?si=")[0].matches("^(https?://)?(www.)?(open.)?spotify.com/(user/[a-zA-Z0-9]+|artist/[a-zA-Z0-9]+|album/[a-zA-Z0-9]+|track/[a-zA-Z0-9]+|playlist/[a-zA-Z0-9]+)$")) { + return url.split("\\?si=")[0].matches("^(https?://)?(www.)?(open.)?spotify.com/playlist/[a-zA-Z0-9]+$") ? "spotify-playlist" : "spotify"; + } + return "unknown"; + + } + + public String getSpotifyTrackID(String uri){ + String[] uriParts = uri.split("\\?si="); + return uriParts[0].replaceAll("https://open.spotify.com/track/",""); + + } + public String getSpotifyPlaylistID(String url){ + String[] uriParts = url.split("\\?si="); + return uriParts[0].replaceAll("https://open.spotify.com/playlist/",""); + + } +} -- cgit v1.2.3