Browse Source

Pongo botón de añadir álbum en lista de albumes

politica
Celestino Rey 1 year ago
parent
commit
e40b893cf1
3 changed files with 36 additions and 44 deletions
  1. +1
    -1
      LyricsPy/K8S/Makefile
  2. +5
    -1
      LyricsPy/servicios/lyrics/templates/albumes.html
  3. +30
    -42
      NavidromePy/app.py

+ 1
- 1
LyricsPy/K8S/Makefile View File

@ -1,4 +1,4 @@
export IMG_VERSION = 6.7
export IMG_VERSION = 6.8
imagen: imagen:
cd ../servicios; make cd ../servicios; make


+ 5
- 1
LyricsPy/servicios/lyrics/templates/albumes.html View File

@ -10,7 +10,11 @@
<div class="col-auto"> <div class="col-auto">
<div class="page-utilities"> <div class="page-utilities">
<div class="row g-2 justify-content-start justify-content-md-end align-items-center">
<div class="row g-4 justify-content-start justify-content-md-end align-items-center">
<div class="col-auto">
<a class="btn app-btn-primary" href="{{ url_for('paginas.add_album') }}">Añadir álbum</a>
</div>
<div class="col-auto"> <div class="col-auto">
<form class="table-search-form row gx-1 align-items-center" action="{{ url_for('paginas.searchalbum') }}" method="get"> <form class="table-search-form row gx-1 align-items-center" action="{{ url_for('paginas.searchalbum') }}" method="get">
<div class="col-auto"> <div class="col-auto">


+ 30
- 42
NavidromePy/app.py View File

@ -1,55 +1,46 @@
from flask import Flask, request, jsonify, Response
import requests
from flask import Flask, request, jsonify, Response, render_template_string
import libsonic
app = Flask(__name__) app = Flask(__name__)
# Configuración de la API de Subsonic # Configuración de la API de Subsonic
SUBSONIC_URL = 'http://navidrome.reymota.es/rest'
SUBSONIC_URL = 'https://navidrome.reymota.es/rest'
USERNAME = 'creylopez' USERNAME = 'creylopez'
PASSWORD = 'Rey-1176' PASSWORD = 'Rey-1176'
CLIENT_NAME = 'NavidromePy' # Nombre de la aplicación cliente CLIENT_NAME = 'NavidromePy' # Nombre de la aplicación cliente
VERSION = '1.16.1' # Versión de la API de Subsonic VERSION = '1.16.1' # Versión de la API de Subsonic
client = libsonic.Connection(SUBSONIC_URL, USERNAME, PASSWORD, 443)
def get_song_stream(song_id): 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
return client.stream(song_id)
def search_song(title): 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']
result = client.search(title)
songs = result['song']
# Filtrar canciones que coincidan exactamente con el título buscado
for song in songs:
if song['title'].lower() == title.lower():
return song['id']
return None return None
@app.route('/play', methods=['GET'])
@app.route('/')
def index():
return render_template_string('''
<!doctype html>
<title>Buscar y reproducir canción</title>
<h1>Buscar y reproducir canción</h1>
<form action="/play" method="post">
<label for="title">Título de la canción:</label>
<input type="text" id="title" name="title">
<input type="submit" value="Reproducir">
</form>
''')
@app.route('/play', methods=['POST'])
def play_song(): def play_song():
title = request.args.get('title')
title = request.form.get('title')
if not title: if not title:
return jsonify({'error': 'Se requiere el título de la canción'}), 400 return jsonify({'error': 'Se requiere el título de la canción'}), 400
@ -58,10 +49,7 @@ def play_song():
return jsonify({'error': 'Canción no encontrada'}), 404 return jsonify({'error': 'Canción no encontrada'}), 404
response = get_song_stream(song_id) 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
return Response(response, content_type='audio/mpeg')
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True)
app.run(debug=True)

Loading…
Cancel
Save