diff --git a/NavidromePy/app.py b/NavidromePy/app.py new file mode 100644 index 0000000..ba8d249 --- /dev/null +++ b/NavidromePy/app.py @@ -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)