Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- I got error 400 on both of the scripts. This under is the new one.
- import tkinter as tk
- from spotipy import Spotify
- from spotipy.oauth2 import SpotifyOAuth
- import requests
- from bs4 import BeautifulSoup
- # Initialize Spotify client (use your own credentials)
- sp = Spotify(auth_manager=SpotifyOAuth(client_id="42f9c566eb7b40718d13647621001bd1",
- client_secret="d7e829af9e41480ea75d26fda9f27143",
- redirect_uri="https://dlucigithub.github.io/Spoti2Lite-project/",
- scope="user-library-read"))
- class MusicApp:
- def __init__(self):
- self.root = tk.Tk()
- self.root.title("Music Streaming Lite")
- self.root.geometry("800x600")
- # Create windows
- self.create_search_window()
- self.create_track_window()
- self.create_lyrics_window()
- self.create_playlist_window()
- self.create_profile_window()
- self.create_settings_window()
- def create_search_window(self):
- self.search_frame = tk.Frame(self.root, bg='lightgrey')
- self.search_frame.pack(fill=tk.BOTH, expand=True)
- self.search_entry = tk.Entry(self.search_frame, width=50)
- self.search_entry.pack(pady=20)
- self.search_button = tk.Button(self.search_frame, text="Search", command=self.search_song)
- self.search_button.pack(pady=10)
- def create_track_window(self):
- self.track_frame = tk.Frame(self.root, bg='white')
- self.track_frame.pack(fill=tk.BOTH, expand=True)
- self.track_label = tk.Label(self.track_frame, text="Track Details")
- self.track_label.pack(pady=20)
- def create_lyrics_window(self):
- self.lyrics_frame = tk.Frame(self.root, bg='white')
- self.lyrics_frame.pack(fill=tk.BOTH, expand=True)
- self.lyrics_text = tk.Text(self.lyrics_frame, wrap=tk.WORD)
- self.lyrics_text.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)
- def create_playlist_window(self):
- self.playlist_frame = tk.Frame(self.root, bg='lightgreen')
- self.playlist_frame.pack(fill=tk.BOTH, expand=True)
- self.playlist_box = tk.Listbox(self.playlist_frame)
- self.playlist_box.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)
- self.show_saved_tracks_button = tk.Button(self.playlist_frame, text="Show Saved Tracks", command=self.fetch_saved_tracks)
- self.show_saved_tracks_button.pack(pady=10)
- def create_profile_window(self):
- self.profile_frame = tk.Frame(self.root, bg='lightblue')
- self.profile_frame.pack(fill=tk.BOTH, expand=True)
- self.profile_label = tk.Label(self.profile_frame, text="User Profile")
- self.profile_label.pack(pady=20)
- def create_settings_window(self):
- self.settings_frame = tk.Frame(self.root, bg='lightyellow')
- self.settings_frame.pack(fill=tk.BOTH, expand=True)
- self.settings_label = tk.Label(self.settings_frame, text="Settings")
- self.settings_label.pack(pady=20)
- def fetch_saved_tracks(self):
- results = sp.current_user_saved_tracks()
- self.playlist_box.delete(0, tk.END)
- for idx, item in enumerate(results['items']):
- track = item['track']
- self.playlist_box.insert(tk.END, f"{idx}. {track['artists'][0]['name']} – {track['name']}")
- def search_song(self):
- song_name = self.search_entry.get()
- track = sp.search(q=song_name, type='track', limit=1)
- if track['tracks']['items']:
- track_info = track['tracks']['items'][0]
- track_name = track_info['name']
- artist_name = track_info['artists'][0]['name']
- self.track_label.config(text=f"{track_name} by {artist_name}")
- lyrics = self.get_lyrics(track_name, artist_name)
- self.lyrics_text.delete(1.0, tk.END)
- self.lyrics_text.insert(tk.END, lyrics)
- else:
- self.track_label.config(text="Track not found")
- self.lyrics_text.delete(1.0, tk.END)
- self.lyrics_text.insert(tk.END, "Lyrics not found")
- def get_lyrics(self, track_name, artist_name):
- base_url = "https://api.genius.com"
- headers = {"Authorization": "Bearer XWnfwIb83SbmPxl5iBYt4sRBuBKgwXQ9w2_USDabEIP2UQDRCDi5EUQQdtXu7NOW"}
- search_url = f"{base_url}/search"
- data = {'q': f"{track_name} {artist_name}"}
- response = requests.get(search_url, params=data, headers=headers)
- json_data = response.json()
- if json_data['response']['hits']:
- song_info = json_data['response']['hits'][0]['result']
- song_url = song_info['url']
- lyrics_response = requests.get(song_url)
- return self.parse_lyrics(lyrics_response.text)
- else:
- return "Lyrics not found"
- def parse_lyrics(self, html):
- soup = BeautifulSoup(html, 'html.parser')
- lyrics_div = soup.find('div', class_='lyrics') or soup.find('div', class_='SongPage__Section__Container')
- lyrics = lyrics_div.get_text() if lyrics_div else "Error: Lyrics not found."
- return lyrics
- def run(self):
- self.root.mainloop()
- if __name__ == "__main__":
- app = MusicApp()
- app.run()
- **OLD SCRIPT**:
- # Spoti2lite
- # --------------- #
- # Libraries
- import tkinter as tk
- from tkinter import ttk
- import spotipy
- from spotipy.oauth2 import SpotifyOAuth
- import requests
- import time
- from bs4 import BeautifulSoup
- import threading
- import webbrowser
- # Functions
- def initialize_spotify(client_id, client_secret, redirect_uri, scope):
- try:
- auth_manager = SpotifyOAuth(
- client_id=client_id,
- client_secret=client_secret,
- redirect_uri=redirect_uri,
- scope=scope
- )
- auth_url = auth_manager.get_authorize_url()
- webbrowser.open(auth_url)
- # Manual input of the URL after redirection
- redirect_response = input("Paste the full redirect URL here: ")
- auth_manager.get_access_token(redirect_response)
- spotify = spotipy.Spotify(auth_manager=auth_manager)
- return spotify
- except spotipy.oauth2.SpotifyOauthError as e:
- print(f"OAuth Error: {e}")
- return None
- def get_saved_tracks(spotify):
- if spotify is None:
- print("Spotify client is not initialized.")
- return []
- try:
- results = spotify.current_user_saved_tracks()
- tracks = []
- for idx, item in enumerate(results['items']):
- track = item['track']
- tracks.append(f"{idx}. {track['artists'][0]['name']} – {track['name']}")
- return tracks
- except Exception as e:
- print(f"Error retrieving saved tracks: {e}")
- return []
- def search_song(spotify, song_name):
- if spotify is None:
- print("Spotify client is not initialized.")
- return None
- try:
- results = spotify.search(q=song_name, type='track', limit=1)
- if results['tracks']['items']:
- track = results['tracks']['items'][0]
- return track
- else:
- return None
- except Exception as e:
- print(f"Error searching for song: {e}")
- return None
- def get_lyrics(genius_api_token, track_name, artist_name):
- base_url = "https://api.genius.com"
- headers = {"Authorization": f"Bearer {genius_api_token}"}
- search_url = f"{base_url}/search"
- data = {'q': f"{track_name} {artist_name}"}
- response = requests.get(search_url, params=data, headers=headers)
- json_data = response.json()
- if json_data['response']['hits']:
- song_info = json_data['response']['hits'][0]['result']
- song_url = song_info['url']
- lyrics_response = requests.get(song_url)
- return parse_lyrics(lyrics_response.text)
- else:
- return "Lyrics not found."
- def parse_lyrics(html):
- soup = BeautifulSoup(html, 'html.parser')
- lyrics_div = soup.find('div', class_='lyrics') or soup.find('div', class_='SongPage__Section__Container')
- lyrics = lyrics_div.get_text() if lyrics_div else "Error: Lyrics not found."
- return lyrics
- def update_playback_time(playback_label, playback_time):
- while True:
- if playback_time[0] > 0:
- playback_time[0] += 1
- minutes, seconds = divmod(playback_time[0], 60)
- current_time = f"{minutes:02}:{seconds:02}"
- playback_label.config(text=f"Playback Time: {current_time}")
- time.sleep(1)
- # UI Scripts
- class MusicApp(tk.Tk):
- def __init__(self, spotify, genius_api_token):
- super().__init__()
- self.title("Music Streaming App")
- self.geometry("800x600")
- self.spotify = spotify
- self.genius_api_token = genius_api_token
- self.playback_time = [0] # Use a list to allow updates from the thread
- self.is_playing = False
- self.create_widgets()
- self.playback_time_thread = threading.Thread(target=update_playback_time, args=(self.playback_label, self.playback_time))
- self.playback_time_thread.daemon = True
- self.playback_time_thread.start()
- def create_widgets(self):
- self.search_frame = tk.Frame(self, bg='lightgrey')
- self.lyrics_frame = tk.Frame(self, bg='white')
- self.playback_frame = tk.Frame(self, bg='lightblue')
- self.playlist_frame = tk.Frame(self, bg='lightgreen')
- self.search_frame.pack(fill=tk.BOTH, expand=True)
- self.lyrics_frame.pack(fill=tk.BOTH, expand=True)
- self.playback_frame.pack(fill=tk.BOTH, expand=True)
- self.playlist_frame.pack(fill=tk.BOTH, expand=True)
- self.search_entry = tk.Entry(self.search_frame, width=50)
- self.search_entry.pack(pady=20)
- self.search_button = tk.Button(self.search_frame, text="Search", command=self.search_song)
- self.search_button.pack(pady=10)
- self.lyrics_text = tk.Text(self.lyrics_frame, wrap=tk.WORD)
- self.lyrics_text.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)
- self.playback_label = tk.Label(self.playback_frame, text="Playback Time: 00:00")
- self.playback_label.pack(pady=20)
- self.playlist_box = tk.Listbox(self.playlist_frame)
- self.playlist_box.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)
- self.controls_frame = tk.Frame(self.playback_frame, bg='lightblue')
- self.controls_frame.pack(pady=10)
- self.play_button = tk.Button(self.controls_frame, text="Play", command=self.play_music)
- self.play_button.pack(side=tk.LEFT, padx=10)
- self.pause_button = tk.Button(self.controls_frame, text="Pause", command=self.pause_music)
- self.pause_button.pack(side=tk.LEFT, padx=10)
- self.skip_button = tk.Button(self.controls_frame, text="Skip", command=self.skip_music)
- self.skip_button.pack(side=tk.LEFT, padx=10)
- self.saved_tracks_button = tk.Button(self.search_frame, text="Show Saved Tracks", command=self.show_saved_tracks)
- self.saved_tracks_button.pack(pady=10)
- def search_song(self):
- song_name = self.search_entry.get()
- track = search_song(self.spotify, song_name)
- if track:
- track_name = track['name']
- artist_name = track['artists'][0]['name']
- lyrics = get_lyrics(self.genius_api_token, track_name, artist_name)
- self.lyrics_text.delete(1.0, tk.END)
- self.lyrics_text.insert(tk.END, lyrics)
- self.add_to_playlist(track_name)
- else:
- self.lyrics_text.delete(1.0, tk.END)
- self.lyrics_text.insert(tk.END, "Song not found.")
- def show_saved_tracks(self):
- saved_tracks = get_saved_tracks(self.spotify)
- self.lyrics_text.delete(1.0, tk.END)
- if saved_tracks:
- for track in saved_tracks:
- self.lyrics_text.insert(tk.END, track + "\n")
- else:
- self.lyrics_text.insert(tk.END, "No saved tracks found.")
- def add_to_playlist(self, track_name):
- self.playlist_box.insert(tk.END, track_name)
- def play_music(self):
- if not self.is_playing:
- self.is_playing = True
- self.playback_time[0] = 0 # Reset playback time
- # Implement real play functionality with Spotify API if available
- def pause_music(self):
- if self.is_playing:
- self.is_playing = False
- # Implement real pause functionality with Spotify API if available
- def skip_music(self):
- if self.is_playing:
- self.is_playing = False
- # Implement real skip functionality with Spotify API if available
- if __name__ == "__main__":
- SPOTIFY_CLIENT_ID = '42f9c566eb7b40718d13647621001bd1'
- SPOTIFY_CLIENT_SECRET = 'd7e829af9e41480ea75d26fda9f27143'
- SPOTIFY_REDIRECT_URI = 'https://dlucigithub.github.io/Spoti2Lite-project/'
- SCOPE = "user-library-read"
- GENIUS_API_TOKEN = 'XWnfwIb83SbmPxl5iBYt4sRBuBKgwXQ9w2_USDabEIP2UQDRCDi5EUQQdtXu7NOW'
- spotify = initialize_spotify(SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, SPOTIFY_REDIRECT_URI, SCOPE)
- if spotify:
- app = MusicApp(spotify, GENIUS_API_TOKEN)
- app.mainloop()
- else:
- print("Failed to initialize Spotify client.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement