Compare commits

...

3 commits

3 changed files with 32 additions and 8 deletions

View file

@ -1,7 +1,8 @@
import re import re
from lxml import html, etree # type: ignore from lxml import html, etree # type: ignore
import urllib3
import shared
# Matches not only latin symbols, # Matches not only latin symbols,
@ -15,11 +16,11 @@ lyrics_xpath = etree.XPath('//div[@id="lyrics-root"][1]/div[@data-lyrics-contain
br_xpath = etree.XPath('.//br') br_xpath = etree.XPath('.//br')
def search(http: urllib3.PoolManager, title: str, artist: str) -> str: def search(title: str, artist: str) -> str:
'''Searches for Genius lyrics using SearXNG + Yahoo and returns the first URL. '''Searches for Genius lyrics using SearXNG + Yahoo and returns the first URL.
Irrelevant texts should be picked manually''' Irrelevant texts should be picked manually'''
resp = http.request( resp = shared.get_http_pool().request(
'GET', 'GET',
'https://searx.dc09.ru/search', 'https://searx.dc09.ru/search',
fields={ fields={
@ -36,11 +37,11 @@ def search(http: urllib3.PoolManager, title: str, artist: str) -> str:
return result['url'] return result['url']
def parse(http: urllib3.PoolManager, url: str) -> str: def parse(url: str) -> str:
'''Requests a lyrics page and parses with libxml2, '''Requests a lyrics page and parses with libxml2,
leaving only text and line breaks''' leaving only text and line breaks'''
resp = http.request('GET', url) resp = shared.get_http_pool().request('GET', url)
tree = html.document_fromstring(resp.data) tree = html.document_fromstring(resp.data)
divs = lyrics_xpath(tree) divs = lyrics_xpath(tree)
del resp, tree del resp, tree

View file

@ -1,6 +1,8 @@
from mutagen import mp3, id3 from mutagen import mp3, id3
from yt_dlp.postprocessor import PostProcessor from yt_dlp.postprocessor import PostProcessor
import genius
ENC_UTF8 = 3 ENC_UTF8 = 3
@ -44,15 +46,26 @@ class ID3TagsPP(PostProcessor):
file = mp3.MP3(information['filepath']) file = mp3.MP3(information['filepath'])
file['TIT2'] = id3.TIT2(encoding=ENC_UTF8, text=information['track']) title = information['track']
file['TPE1'] = id3.TPE1(encoding=ENC_UTF8, text=information['artist']) artist = information['artist']
file['TIT2'] = id3.TIT2(encoding=ENC_UTF8, text=title)
file['TPE1'] = id3.TPE1(encoding=ENC_UTF8, text=artist)
if 'album' in information: if 'album' in information:
file['TALB'] = id3.TALB(encoding=ENC_UTF8, text=information['album']) file['TALB'] = id3.TALB(encoding=ENC_UTF8, text=information['album'])
if 'release_year' in information: if 'release_year' in information:
file['TDRC'] = id3.TDRC(encoding=ENC_UTF8, text=str(information['release_year'])) file['TDRC'] = id3.TDRC(encoding=ENC_UTF8, text=str(information['release_year']))
if 'track_number' in information: if 'track_number' in information:
file['TRCK'] = id3.TRCK(encoding=ENC_UTF8, text=str(information['track_number'])) file['TRCK'] = id3.TRCK(encoding=ENC_UTF8, text=str(information['track_number']))
if 'genre' in information:
file['TCON'] = id3.TCON(encoding=ENC_UTF8, text=information['genre'])
# TODO: lyrics file["USLT"] try:
lyr_url = genius.search(title, artist)
file['USLT'] = id3.USLT(encoding=ENC_UTF8, text=genius.parse(lyr_url))
except:
pass
file.save()
return [], information return [], information

10
backend/shared.py Normal file
View file

@ -0,0 +1,10 @@
from urllib3 import PoolManager
_http: PoolManager | None = None
def get_http_pool() -> PoolManager:
global _http
if _http is None:
_http = PoolManager()
return _http