From 990417c8cc5239a595ec7af291201a8087e0b5dd Mon Sep 17 00:00:00 2001 From: Haob2110011 Date: Wed, 23 Oct 2024 04:09:16 +0700 Subject: [PATCH 1/2] #30 issue: Mood Based Music Recommender --- .../Emosic-Spoti.py | 87 ++++++++++++++++++ #30-Mood-Based-Music-Recommender/README.md | 72 +++++++++++++++ #30-Mood-Based-Music-Recommender/image.png | Bin 0 -> 51483 bytes .../requirement.txt | 2 + 4 files changed, 161 insertions(+) create mode 100644 #30-Mood-Based-Music-Recommender/Emosic-Spoti.py create mode 100644 #30-Mood-Based-Music-Recommender/README.md create mode 100644 #30-Mood-Based-Music-Recommender/image.png create mode 100644 #30-Mood-Based-Music-Recommender/requirement.txt diff --git a/#30-Mood-Based-Music-Recommender/Emosic-Spoti.py b/#30-Mood-Based-Music-Recommender/Emosic-Spoti.py new file mode 100644 index 0000000..da83311 --- /dev/null +++ b/#30-Mood-Based-Music-Recommender/Emosic-Spoti.py @@ -0,0 +1,87 @@ +import spotipy +from spotipy.oauth2 import SpotifyClientCredentials +import random + +# Authentication - Replace with your credentials +CLIENT_ID = 'your_spotify_client_id' +CLIENT_SECRET = 'your_spotify_client_secret' + +# Connect to Spotify API +auth_manager = SpotifyClientCredentials(client_id=CLIENT_ID, client_secret=CLIENT_SECRET) +sp = spotipy.Spotify(auth_manager=auth_manager) + +# Dictionary to map emotions to musical characteristics +emotion_to_genre = { + 'happy': ['pop', 'dance', 'indie'], + 'sad': ['acoustic', 'blues', 'piano'], + 'angry': ['metal', 'rock', 'punk'], + 'relaxed': ['ambient', 'chill', 'classical'], + 'energetic': ['electronic', 'hip-hop', 'funk'], + 'anxious': ['ambient', 'classical', 'jazz'], + 'cheerful': ['pop', 'indie', 'reggae'], + 'stressed': ['jazz', 'chill', 'lo-fi'], + 'dreamy': ['dream-pop', 'ambient', 'shoegaze'], + 'excited': ['dance', 'electronic', 'pop'], + 'bored': ['alternative', 'indie', 'chill'], + 'nostalgic': ['classic rock', 'folk', 'retro'], + 'hopeful': ['pop', 'inspirational', 'uplifting'], + 'content': ['soft rock', 'acoustic', 'country'], + 'romantic': ['pop', 'r&b', 'soul'], +} + +# Function to recommend tracks based on emotion +def recommend_tracks(emotion): + genres = emotion_to_genre.get(emotion.lower(), ['pop']) # Default to 'pop' if emotion is not found + selected_genre = random.choice(genres) + + # Fetch recommendations from Spotify + results = sp.recommendations(seed_genres=[selected_genre], limit=10) # Increase limit for more results + tracks = results['tracks'] + + playlist = [] + for track in tracks: + track_info = { + 'name': track['name'], + 'artist': track['artists'][0]['name'], + 'url': track['external_urls']['spotify'] + } + playlist.append(track_info) + + return playlist, genres + +# Function to get maximum length of strings in a list of dictionaries +def get_max_lengths(playlist): + max_name_length = max(len(song['name']) for song in playlist) if playlist else 0 + max_artist_length = max(len(song['artist']) for song in playlist) if playlist else 0 + max_url_length = max(len(song['url']) for song in playlist) if playlist else 0 + return max_name_length, max_artist_length, max_url_length + +# Main loop for user input +while True: + emotion = input("\nEnter your emotion (happy, sad, angry, relaxed, energetic, anxious, cheerful, stressed, dreamy, excited, bored, nostalgic, hopeful, content, romantic) or type 'exit' to quit: ").strip().lower() + + if emotion == 'exit': + print("Goodbye my Love!!!") + break + + # Get playlist based on the emotion + playlist, genres = recommend_tracks(emotion) + + # Get maximum lengths for formatting + max_name_length, max_artist_length, max_url_length = get_max_lengths(playlist) + + # Set a minimum width for columns to ensure proper alignment + min_name_length = max(20, max_name_length) + min_artist_length = max(15, max_artist_length) + min_url_length = 35 # Fixed width for URL + + # Display the recommended playlist + if emotion not in emotion_to_genre: + print("The emotion you entered is NOT in the list, so we will show you pop music instead.") + + print(f"Here are some songs for your '{emotion}' mood:" if emotion in emotion_to_genre else "Here are some pop songs for you:") + print(f"STT | Song Name{' ' * (min_name_length - 9)} | Artist{' ' * (min_artist_length - 6)} | URL") + print("-" * (11 + max_name_length + max_artist_length + max_url_length)) + + for idx, song in enumerate(playlist, 1): + print(f"{idx:<3} | {song['name']:<{min_name_length}} | {song['artist']:<{min_artist_length}} | {song['url']}") diff --git a/#30-Mood-Based-Music-Recommender/README.md b/#30-Mood-Based-Music-Recommender/README.md new file mode 100644 index 0000000..1b5917b --- /dev/null +++ b/#30-Mood-Based-Music-Recommender/README.md @@ -0,0 +1,72 @@ +# Music Recommendation Based on Emotion + +A Python script that recommends music playlists based on user-inputted emotions using the Spotify API. The script fetches songs that match the user's mood and provides a playlist with links to each song. + +## Features + +- Recommend songs based on various emotions. +- Integrates with Spotify's Web API to fetch song recommendations. + +## Setup + +### 1. Set Up Spotify API + +To use this script, you will need to create a Spotify Developer account and register an app to obtain your Client ID and Client Secret. Follow the instructions [here](https://developer.spotify.com/documentation/general/guides/authorization/app-settings/) to get your credentials. + +Here is an example: + +![alt text](image.png) + +### 2. Install Required Libraries + +Make sure you have the following Python libraries installed: + + ```bash + pip install spotipy + pip install requests + ``` + + +### 3. Run the Script + +**Notes:** +- Replace **your_spotify_client_id** and **your_spotify_client_secret** in the script with your actual Spotify API credentials. +- You can extend the emotion_to_genre dictionary with more emotions and genres. +- You can modify the limit=10 in the Spotify recommendations query to change the number of recommended songs. + +To run the script, use the following command: + + ```bash + python Emosic-Spoti.py + ``` + +**Usage** + +After running the script, enter an emotion from the list below to get a music playlist: + +- happy +- sad +- angry +- relaxed +- energetic +- anxious +- cheerful +- stressed +- dreamy +- excited +- bored +- nostalgic +- hopeful +- content +- romantic + + Type 'exit' to quit the program. + +If the Emotion you enter is NOT in the list, so we will show **pop** music instead. + +**How It Works** + +- **Authentication**: The script uses the SpotifyClientCredentials class to handle authentication with the Spotify API. +- **Emotion-to-Genre Mapping**: The script maps emotions to corresponding music genres using a predefined dictionary. +- **Track Recommendations**: The script queries the Spotify API to fetch song recommendations based on the selected genre. +- **User Input**: The user inputs their emotion, and the script fetches and displays a playlist of matching songs. \ No newline at end of file diff --git a/#30-Mood-Based-Music-Recommender/image.png b/#30-Mood-Based-Music-Recommender/image.png new file mode 100644 index 0000000000000000000000000000000000000000..046b91eb9199676ccaaabc75f4a8d5228caceee3 GIT binary patch literal 51483 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

4#O4 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 Date: Thu, 31 Oct 2024 01:18:23 +0700 Subject: [PATCH 2/2] Mood Based Music Recommender --- .../Emosic-Spoti.py | 0 .../README.md | 0 .../image.png | Bin .../requirement.txt | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {#30-Mood-Based-Music-Recommender => Mood Based Music Recommender}/Emosic-Spoti.py (100%) rename {#30-Mood-Based-Music-Recommender => Mood Based Music Recommender}/README.md (100%) rename {#30-Mood-Based-Music-Recommender => Mood Based Music Recommender}/image.png (100%) rename {#30-Mood-Based-Music-Recommender => Mood Based Music Recommender}/requirement.txt (100%) diff --git a/#30-Mood-Based-Music-Recommender/Emosic-Spoti.py b/Mood Based Music Recommender/Emosic-Spoti.py similarity index 100% rename from #30-Mood-Based-Music-Recommender/Emosic-Spoti.py rename to Mood Based Music Recommender/Emosic-Spoti.py diff --git a/#30-Mood-Based-Music-Recommender/README.md b/Mood Based Music Recommender/README.md similarity index 100% rename from #30-Mood-Based-Music-Recommender/README.md rename to Mood Based Music Recommender/README.md diff --git a/#30-Mood-Based-Music-Recommender/image.png b/Mood Based Music Recommender/image.png similarity index 100% rename from #30-Mood-Based-Music-Recommender/image.png rename to Mood Based Music Recommender/image.png diff --git a/#30-Mood-Based-Music-Recommender/requirement.txt b/Mood Based Music Recommender/requirement.txt similarity index 100% rename from #30-Mood-Based-Music-Recommender/requirement.txt rename to Mood Based Music Recommender/requirement.txt