| @ -0,0 +1,67 @@ | |||||
| from flask import Flask, request, jsonify, Response | |||||
| import requests | |||||
| app = Flask(__name__) | |||||
| # Configuración de la API de Subsonic | |||||
| SUBSONIC_URL = 'http://navidrome.reymota.es/rest' | |||||
| USERNAME = 'creylopez' | |||||
| PASSWORD = 'Rey-1176' | |||||
| CLIENT_NAME = 'NavidromePy' # Nombre de la aplicación cliente | |||||
| VERSION = '1.16.1' # Versión de la API de Subsonic | |||||
| def get_song_stream(song_id): | |||||
| url = f"{SUBSONIC_URL}/stream" | |||||
| params = { | |||||
| 'u': USERNAME, | |||||
| 'p': PASSWORD, | |||||
| 'v': VERSION, | |||||
| 'c': CLIENT_NAME, | |||||
| 'id': song_id, | |||||
| 'f': 'json' | |||||
| } | |||||
| response = requests.get(url, params=params, stream=True) | |||||
| return response | |||||
| def search_song(title): | |||||
| url = f"{SUBSONIC_URL}/search3" | |||||
| params = { | |||||
| 'u': USERNAME, | |||||
| 'p': PASSWORD, | |||||
| 'v': VERSION, | |||||
| 'c': CLIENT_NAME, | |||||
| 'query': title, | |||||
| # 'songCount': 1, | |||||
| 'f': 'json' | |||||
| } | |||||
| response = requests.get(url, params=params) | |||||
| if response.status_code == 200: | |||||
| result = response.json() | |||||
| print(result) | |||||
| songs = result['subsonic-response']['searchResult3']['song'] | |||||
| if songs: | |||||
| for cancion in songs: | |||||
| print("Canción buscada: '",title,"' - encontrada: '", cancion['title'],"'") | |||||
| if cancion['title'] == title: | |||||
| return cancion['id'] | |||||
| return None | |||||
| @app.route('/play', methods=['GET']) | |||||
| def play_song(): | |||||
| title = request.args.get('title') | |||||
| if not title: | |||||
| return jsonify({'error': 'Se requiere el título de la canción'}), 400 | |||||
| song_id = search_song(title) | |||||
| if not song_id: | |||||
| return jsonify({'error': 'Canción no encontrada'}), 404 | |||||
| response = get_song_stream(song_id) | |||||
| if response.status_code == 200: | |||||
| return Response(response.iter_content(chunk_size=1024), content_type=response.headers['Content-Type']) | |||||
| else: | |||||
| return jsonify({'error': 'Error al reproducir la canción'}), response.status_code | |||||
| if __name__ == '__main__': | |||||
| app.run(debug=True) | |||||