From a2ae91be13bc16c9be08e5fb541a3fb98e9324bf Mon Sep 17 00:00:00 2001 From: Leonardo Segala Date: Fri, 1 Aug 2025 21:21:24 +0200 Subject: [PATCH] Add youtube info download --- backend/src/song_fetch.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/backend/src/song_fetch.py b/backend/src/song_fetch.py index 96288e9..7a1cad4 100644 --- a/backend/src/song_fetch.py +++ b/backend/src/song_fetch.py @@ -21,9 +21,7 @@ def lastfm_search(query: str) -> tuple[str, str]: 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 ) +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={ @@ -44,20 +42,23 @@ def lastfm_getinfo( ) -print(yt_dlp, flush=True) +def download_song_mp3(name: str, artist: str) -> tuple[str, str] | None: # ( id, audio ) + ydl_opts = { + "format": "bestaudio", + "default_search": "ytsearch1", + "outtmpl": "%(title)s.%(ext)s", + "skip_download": True, + } -# # def get_yt_mp3link(name: str, artist: str) -> str: ... -# # os.popen("/yt-dlp ") + with yt_dlp.YoutubeDL(ydl_opts) as ydl: + info = ydl.extract_info(f"{name!r} - {artist!r}", download=False) -# # /yt-dlp/yt-dlp.sh "ytsearch1:Never gonna give you up" --get-url -f "ba" + first_entry = info["entries"][0] -# import json + video_id = first_entry["id"] -# print(json.dumps(lastfm_getinfo(*lastfm_search("money")), indent=2)) -# exit(1) + for fmt in first_entry["formats"]: + if "acodec" in fmt and fmt["acodec"] != "none": + return video_id, fmt["url"] - -# # def - - -# ## query ==> lastfm ==> list of songs ==> take first ==> request song info ==> get YT link ==> save in DB ==> + return None