Add song fetch test

This commit is contained in:
Leonardo Segala 2025-08-01 19:16:20 +02:00
parent fa73c6de66
commit 8bb582148d
6 changed files with 76 additions and 9 deletions

View file

@ -2,6 +2,10 @@ FROM python:3.13.5-alpine
WORKDIR /app
RUN apk update && apk add git
RUN git clone --depth 1 'https://github.com/yt-dlp/yt-dlp.git' /yt-dlp
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

View file

@ -1,2 +1,4 @@
Flask==3.1.0
flask-cors
dotenv
requests

View file

@ -1,15 +1,13 @@
from flask import Flask, Response, jsonify, request
from flask_cors import CORS
<<<<<<< HEAD
import dotenv
from .classes import Room
# from . import song_fetch
import dotenv
from .room import Room
from . import song_fetch
dotenv.load_dotenv()
=======
from room import Room
>>>>>>> refs/remotes/origin/main
app = Flask(__name__)
CORS(app)

View file

@ -1,6 +1,6 @@
from dataclasses import dataclass
from song import Song
from .song import Song
type UserScoredSong = tuple[Song, int]

View file

@ -1,5 +1,5 @@
from dataclasses import dataclass
from connect import get_connection
from .connect import get_connection
def init_db():

63
backend/src/song_fetch.py Normal file
View file

@ -0,0 +1,63 @@
import requests
import urllib.parse
import os.path
import os
import sys
sys.path.append("/yt-dlp")
import yt_dlp
def lastfm_search(query: str) -> tuple[str, str]:
response = requests.get(
url="https://ws.audioscrobbler.com/2.0/?method=track.search&format=json",
params={"limit": 5, "track": query, "api_key": os.environ["LASTFM_API_KEY"]},
)
assert response.status_code == 200
track_info = response.json()["results"]["trackmatches"]["track"][0]
return track_info["name"], track_info["artist"]
def lastfm_getinfo(
name: str, artist: str
) -> tuple[str, str, str, str, list[str]]: # ( id, image_id, tags )
response = requests.get(
url="https://ws.audioscrobbler.com/2.0/?method=track.getInfo&format=json",
params={
"track": name,
"artist": artist,
"api_key": os.environ["LASTFM_API_KEY"],
},
)
track_info = response.json()["track"]
image_url = urllib.parse.urlparse(track_info["album"]["image"][0]["#text"])
return (
track_info["mbid"],
[t["name"] for t in track_info["toptags"]["tag"]],
os.path.splitext(os.path.basename(image_url.path))[0],
)
print(yt_dlp, flush=True)
# # def get_yt_mp3link(name: str, artist: str) -> str: ...
# # os.popen("/yt-dlp ")
# # /yt-dlp/yt-dlp.sh "ytsearch1:Never gonna give you up" --get-url -f "ba"
# import json
# print(json.dumps(lastfm_getinfo(*lastfm_search("money")), indent=2))
# exit(1)
# # def
# ## query ==> lastfm ==> list of songs ==> take first ==> request song info ==> get YT link ==> save in DB ==>