Our team's goal is to develop a program that matches Spotify users based on their music taste. This is achieved by analyzing songs from the users' playlists and determine their music taste. Based on the similarity of the music tastes, we will determine to match the users. Our implementation involves using the Spotify Web API and following Clean Architecture and Solid Principles.
Members:
Wonjae Lee - Sam-Wonjae-Lee (Wonjae Lee)
Andy Ren - 1172097
David Li - dvdli123 (Jiaming Li)
Michael Pan - Yaymichael
Frank Peng - Graves451 (Frank Peng)
The Spotify Web API provides a variety of ways for developers to interact with Spotify's streaming service, like receiving information about users, playlists, and artists. Our group uses the API to retrieve the music taste of users using their Spotify user ID.
This is process for our implementation:
Retrieve user ID -> Get user's playlist IDs -> Get artist IDs from playlist ID -> Get genres from artist ID
We use the genres from each user to determine if they match based on the similarities.
For more information about the Spotify API, please visit source and Java Wrapper source
- Go to Spotify and click on your profile
- Click on three dots then click copy link option
- Strip out the pasted value of the part that says "https://open.spotify.com/user/" leaving only a string of numbers
Example: https://open.spotify.com/user/{USER_ID}?si=e39f82815e654f82 - Copy down the string of numbers after user/ and before ? to obtain the user id
- HomePageFactory, MatchFactory by Andy Ren
- LoginUseCaseFactory by Wonjae Lee
- Main by Michael Pan
- FileUserDAO by Frank Peng
- InMemoryUserDAO by David Li
- SpotifyApiCallAccessTokenDAO, SpotifyApiCallArtistGenresDAO, SpotifyApiCallGetInfoDAO, SpotifyApiCallPlaylistItemsDAO, SpotifyApiCallUserPlaylistDAO, SpotifyApiCallUserProfileDAO by Wonjae Lee
- CommonUserFactory, UserFactory, User by David Li
- Inbox, FriendsList, Playlist by Frank Peng
- CommonUser by Andy Ren
Accept Invite:
- AcceptController, AcceptPresenter by Michael Pan
Decline Invite:
- DeclineController, DeclinePresenter by Michael Pan
Home Page:
- HomePageController, HomePagePresenter, HomePageState, HomePageViewModel by Andy Ren
Inbox:
- InboxState, InboxViewModel by David Li
Login:
- LoginController, LoginPresenter, LoginState, LoginViewModel by Wonjae Lee
Match:
- MatchController, MatchPresenter, MatchState, MatchViewModel by Andy Ren
Open Inbox:
- OpenInboxController, OpenInboxPresenter by David Li
Send Invite:
- SendInviteController, SendInvitePresenter by David Li
View:
- ViewManagerModel by David Li
- ViewModel by Andy Ren
Accept Invite:
- AcceptInputBoundary, AcceptInputData, AcceptInteractor, AcceptOutputBoundary, AcceptOutputData, AcceptUserDataAccessInterface by Michael Pan
Decline Invite:
- DeclineInputBoundary, DeclineInputData, DeclineInteractor, DeclineOutputBoundary, DeclineOutputData, DeclineUserDataAccessInterface by Michael Pan
Home Page:
- HomePageInputBoundary, HomePageInputData, HomePageInteractor, HomePageOutputBoundary, HomePageOutputData by Andy Ren
Login:
- LoginInputBoundary, LoginInputData, LoginInteractor, LoginOutputBoundary, LoginOutputData, LoginUserDataAccessInterface by Wonjae Lee
Match:
- MatchInputBoundary, MatchInputData, MatchInteractor, MatchOutputBoundary, MatchOutputData, MatchUserDataAccessInterface by Frank Peng
Open Inbox:
- OpenInboxInputBoundary, OpenInboxInputData, OpenInboxInteractor, OpenInboxOutputBoundary, OpenInboxOutputData, OpenInboxUserDataAccessInterface by David Li
Send Invite:
- SendInviteInputBoundary, SendInviteInputData, SendInviteInteractor, SendInviteOutputBoundary, SendInviteOutputData, SendInviteUserDataAccessInterface by David Li
- HomePageView, MatchView, ProfilePic by Andy Ren
- InboxView by Michael Pan
- LabelTextPanel, LoginView by Wonjae Lee
- ViewManager by David Li