Big Debug of PMOQobuz step 3
This commit is contained in:
97
pmoqobuz/test_python_qobuz/test_qobuz.py
Executable file
97
pmoqobuz/test_python_qobuz/test_qobuz.py
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script de test pour Qobuz API
|
||||
Compare le comportement Python vs Rust
|
||||
"""
|
||||
|
||||
import sys
|
||||
import getpass
|
||||
from spoofbuz import Spoofer
|
||||
from raw import RawApi
|
||||
|
||||
def main():
|
||||
print("=== Test Qobuz API (Python) ===\n")
|
||||
|
||||
# Obtenir les credentials
|
||||
username = input("Qobuz username (default: eric@coissac.eu): ").strip() or "eric@coissac.eu"
|
||||
password = getpass.getpass("Qobuz password: ")
|
||||
|
||||
if not password:
|
||||
print("Error: password required")
|
||||
return 1
|
||||
|
||||
print("\n1. Creating RawApi (will auto-initialize Spoofer)...")
|
||||
# Si on ne passe pas appid/configvalue, il crée automatiquement le spoofer
|
||||
api = RawApi(appid=None, configvalue=None)
|
||||
print(f" App ID: {api.appid}")
|
||||
|
||||
print("\n2. Logging in...")
|
||||
login_result = api.user_login(username=username, password=password)
|
||||
if not login_result:
|
||||
print(f" ✗ Login failed: {api.error}")
|
||||
return 1
|
||||
print(f" ✓ Login successful - User ID: {api.user_id}")
|
||||
|
||||
print("\n3. Getting favorite albums...")
|
||||
albums = api.favorite_getUserFavorites(type="albums", limit="10")
|
||||
if not albums:
|
||||
print(f" ✗ Failed: {api.error}")
|
||||
return 1
|
||||
|
||||
album_count = albums.get('albums', {}).get('total', 0)
|
||||
print(f" ✓ Found {album_count} favorite albums")
|
||||
|
||||
# Get first album
|
||||
items = albums.get('albums', {}).get('items', [])
|
||||
if not items:
|
||||
print(" No albums in favorites")
|
||||
return 1
|
||||
|
||||
first_album = items[0]
|
||||
album_id = first_album.get('id')
|
||||
album_title = first_album.get('title', 'Unknown')
|
||||
album_artist = first_album.get('artist', {}).get('name', 'Unknown')
|
||||
|
||||
print(f"\n4. First album: {album_artist} - {album_title}")
|
||||
print(f" Album ID: {album_id}")
|
||||
|
||||
# Get album tracks
|
||||
print("\n5. Getting album tracks...")
|
||||
album_data = api.album_get(album_id=album_id)
|
||||
if not album_data:
|
||||
print(f" ✗ Failed: {api.error}")
|
||||
return 1
|
||||
|
||||
tracks = album_data.get('tracks', {}).get('items', [])
|
||||
if not tracks:
|
||||
print(" No tracks in album")
|
||||
return 1
|
||||
|
||||
first_track = tracks[0]
|
||||
track_id = first_track.get('id')
|
||||
track_title = first_track.get('title', 'Unknown')
|
||||
print(f" ✓ Found {len(tracks)} tracks")
|
||||
print(f" First track: {track_title} (ID: {track_id})")
|
||||
|
||||
# Get file URL (this is where signature is needed!)
|
||||
print("\n6. Getting file URL for first track...")
|
||||
print(" ⚠️ This call requires signature validation")
|
||||
|
||||
file_url_data = api.track_getFileUrl(track_id=track_id, format_id=27)
|
||||
if not file_url_data:
|
||||
print(f" ✗ Failed: {api.error}")
|
||||
print(f" Status code: {api.status_code}")
|
||||
return 1
|
||||
|
||||
url = file_url_data.get('url', '')
|
||||
mime_type = file_url_data.get('mime_type', '')
|
||||
|
||||
print(f" ✓ Success!")
|
||||
print(f" URL: {url[:80]}...")
|
||||
print(f" MIME type: {mime_type}")
|
||||
|
||||
print("\n=== Test completed successfully! ===")
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user