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
|
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
|
||||||
|
|
|
@ -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
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