add a file
This commit is contained in:
93
lyricsget.py
Normal file
93
lyricsget.py
Normal file
@@ -0,0 +1,93 @@
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
from dataclasses import dataclass
|
||||
|
||||
import mutagen
|
||||
import requests
|
||||
from mutagen.flac import Picture
|
||||
from mutagen.id3._frames import APIC
|
||||
|
||||
|
||||
@dataclass
|
||||
class Cover:
|
||||
data: bytes
|
||||
mimeType: str
|
||||
|
||||
|
||||
print("Input directory with music")
|
||||
dir = input()
|
||||
|
||||
# TODO: Rename folder like albumYear - albumName
|
||||
# TODO: Rename song with format like 05 - Song when it 05. Song
|
||||
for root, _, files in os.walk(dir, topdown=True):
|
||||
coverData = None
|
||||
# TODO: Fetch cover from url
|
||||
for cover in files:
|
||||
suffix = pathlib.Path(cover).suffix
|
||||
if suffix == ".jpg":
|
||||
path = root + "/" + cover
|
||||
data = None
|
||||
with open(path, "rb") as f:
|
||||
data = f.read()
|
||||
|
||||
coverData = Cover(data=data, mimeType="image/jpeg")
|
||||
break
|
||||
elif suffix == ".png":
|
||||
path = root + "/" + cover
|
||||
data = None
|
||||
with open(path, "rb") as f:
|
||||
data = f.read()
|
||||
|
||||
coverData = Cover(data=data, mimeType="image/png")
|
||||
|
||||
break
|
||||
for file in files:
|
||||
suffix = pathlib.Path(file).suffix
|
||||
if suffix == ".flac" or suffix == ".mp3":
|
||||
try:
|
||||
path = root + "/" + file
|
||||
audio = mutagen.File(path)
|
||||
|
||||
params = {
|
||||
"artist_name": audio["artist"],
|
||||
"track_name": audio["title"],
|
||||
"album_name": audio["album"],
|
||||
"duration": audio.info.length,
|
||||
}
|
||||
|
||||
# Maybe add more sites with lyrics?
|
||||
lrcreq = requests.get("https://lrclib.net/api/get", params)
|
||||
|
||||
if lrcreq.status_code == 200:
|
||||
jsonLyrics = json.loads(lrcreq.text)
|
||||
|
||||
if "syncedLyrics" in jsonLyrics:
|
||||
audio["lyrics"] = jsonLyrics["syncedLyrics"]
|
||||
else:
|
||||
audio["lyrics"] = jsonLyrics["plainLyrics"]
|
||||
else:
|
||||
print(lrcreq.text)
|
||||
|
||||
if coverData is not None:
|
||||
if suffix == ".flac":
|
||||
pic = Picture()
|
||||
pic.type = 3
|
||||
pic.mime = coverData.mimeType
|
||||
pic.data = coverData.data
|
||||
audio.add_picture(pic)
|
||||
|
||||
elif suffix == ".mp3":
|
||||
if not audio.tags:
|
||||
audio.add_tags()
|
||||
audio.tags.add(
|
||||
APIC(
|
||||
encoding=3,
|
||||
mime=coverData.mimeType,
|
||||
type=3,
|
||||
data=coverData.data,
|
||||
)
|
||||
)
|
||||
audio.save()
|
||||
except Exception as e:
|
||||
print(f"Error while trying to clean the music: {e}")
|
||||
Reference in New Issue
Block a user