Compare commits
3 commits
4d83b238e4
...
80a7d2bde5
Author | SHA1 | Date | |
---|---|---|---|
80a7d2bde5 | |||
7669127826 | |||
3a25d86b4f |
3 changed files with 32 additions and 8 deletions
|
@ -1,7 +1,8 @@
|
|||
import re
|
||||
|
||||
from lxml import html, etree # type: ignore
|
||||
import urllib3
|
||||
|
||||
import shared
|
||||
|
||||
|
||||
# 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')
|
||||
|
||||
|
||||
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.
|
||||
Irrelevant texts should be picked manually'''
|
||||
|
||||
resp = http.request(
|
||||
resp = shared.get_http_pool().request(
|
||||
'GET',
|
||||
'https://searx.dc09.ru/search',
|
||||
fields={
|
||||
|
@ -36,11 +37,11 @@ def search(http: urllib3.PoolManager, title: str, artist: str) -> str:
|
|||
return result['url']
|
||||
|
||||
|
||||
def parse(http: urllib3.PoolManager, url: str) -> str:
|
||||
def parse(url: str) -> str:
|
||||
'''Requests a lyrics page and parses with libxml2,
|
||||
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)
|
||||
divs = lyrics_xpath(tree)
|
||||
del resp, tree
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from mutagen import mp3, id3
|
||||
from yt_dlp.postprocessor import PostProcessor
|
||||
|
||||
import genius
|
||||
|
||||
|
||||
ENC_UTF8 = 3
|
||||
|
||||
|
@ -44,15 +46,26 @@ class ID3TagsPP(PostProcessor):
|
|||
|
||||
file = mp3.MP3(information['filepath'])
|
||||
|
||||
file['TIT2'] = id3.TIT2(encoding=ENC_UTF8, text=information['track'])
|
||||
file['TPE1'] = id3.TPE1(encoding=ENC_UTF8, text=information['artist'])
|
||||
title = information['track']
|
||||
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:
|
||||
file['TALB'] = id3.TALB(encoding=ENC_UTF8, text=information['album'])
|
||||
if 'release_year' in information:
|
||||
file['TDRC'] = id3.TDRC(encoding=ENC_UTF8, text=str(information['release_year']))
|
||||
if 'track_number' in information:
|
||||
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
|
||||
|
|
10
backend/shared.py
Normal file
10
backend/shared.py
Normal 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
|
Loading…
Add table
Reference in a new issue