Files
MusicAnalyser/backend/scripts/get_refresh_token.py
bnair123 272148c5bf feat: migrate to PostgreSQL and enhance playlist curation
- Migrate database from SQLite to PostgreSQL (100.91.248.114:5433)
- Fix playlist curation to use actual top tracks instead of AI name matching
- Add /playlists/history endpoint for historical playlist viewing
- Add Playlist Archives section to frontend with expandable history
- Add playlist-modify-* scopes to Spotify OAuth for playlist creation
- Rewrite Genius client to use official API (fixes 403 scraping blocks)
- Ensure playlists are created on Spotify before curation attempts
- Add DATABASE.md documentation for PostgreSQL schema
- Add migrations for PlaylistConfig and composition storage
2025-12-30 22:24:56 +04:00

94 lines
2.9 KiB
Python

import os
import sys
import webbrowser
import requests
import urllib.parse
from http.server import HTTPServer, BaseHTTPRequestHandler
# Instructions for the user:
# 1. Go to Spotify Developer Dashboard: https://developer.spotify.com/dashboard/
# 2. Create an App.
# 3. Edit Settings -> Redirect URIs -> Add "http://localhost:8888/callback"
# 4. Save Settings.
# 5. Copy Client ID and Client Secret.
# 6. Run this script: python get_refresh_token.py
# CONFIGURATION - You can hardcode these or input them when prompted
SPOTIFY_CLIENT_ID = input("Enter your Spotify Client ID: ").strip()
SPOTIFY_CLIENT_SECRET = input("Enter your Spotify Client Secret: ").strip()
REDIRECT_URI = "http://127.0.0.1:8888/callback"
SCOPE = "user-read-recently-played user-read-playback-state playlist-modify-public playlist-modify-private"
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
query = urllib.parse.urlparse(self.path).query
params = urllib.parse.parse_qs(query)
if "code" in params:
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(b"<h1>Got the code! check your terminal.</h1>")
code = params["code"][0]
get_token(code)
# Shut down server
raise KeyboardInterrupt
def get_token(code):
url = "https://accounts.spotify.com/api/token"
payload = {
"grant_type": "authorization_code",
"code": code,
"redirect_uri": REDIRECT_URI,
"client_id": SPOTIFY_CLIENT_ID,
"client_secret": SPOTIFY_CLIENT_SECRET,
}
response = requests.post(url, data=payload)
if response.status_code == 200:
data = response.json()
print("\n" + "=" * 50)
print("SUCCESS! HERE ARE YOUR CREDENTIALS")
print("=" * 50)
print(f"\nSPOTIFY_REFRESH_TOKEN={data['refresh_token']}")
print(f"SPOTIFY_CLIENT_ID={SPOTIFY_CLIENT_ID}")
print(f"SPOTIFY_CLIENT_SECRET={SPOTIFY_CLIENT_SECRET}")
print("\nSave these in your .env file or share them with the agent.")
print("=" * 50 + "\n")
else:
print("Error getting token:", response.text)
def start_auth():
auth_url = "https://accounts.spotify.com/authorize?" + urllib.parse.urlencode(
{
"response_type": "code",
"client_id": SPOTIFY_CLIENT_ID,
"scope": SCOPE,
"redirect_uri": REDIRECT_URI,
}
)
print(f"Opening browser to: {auth_url}")
try:
webbrowser.open(auth_url)
except:
print(f"Could not open browser. Please manually visit: {auth_url}")
server_address = ("", 8888)
httpd = HTTPServer(server_address, RequestHandler)
print("Listening on port 8888...")
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
if __name__ == "__main__":
start_auth()