91 lines
2.2 KiB
Python
91 lines
2.2 KiB
Python
|
from typing import List
|
||
|
import requests
|
||
|
from bs4 import BeautifulSoup
|
||
|
import pycountry
|
||
|
|
||
|
from ..utils.shared import (
|
||
|
ENCYCLOPAEDIA_METALLUM_LOGGER as LOGGER
|
||
|
)
|
||
|
|
||
|
from .abstract import Page
|
||
|
from ..objects import (
|
||
|
MusicObject,
|
||
|
Artist,
|
||
|
Source,
|
||
|
SourcePages,
|
||
|
Song,
|
||
|
Album,
|
||
|
ID3Timestamp,
|
||
|
FormattedText,
|
||
|
Label,
|
||
|
Options
|
||
|
)
|
||
|
from ..utils import (
|
||
|
string_processing,
|
||
|
shared
|
||
|
)
|
||
|
|
||
|
|
||
|
class EncyclopaediaMetallum(Page):
|
||
|
API_SESSION: requests.Session = requests.Session()
|
||
|
API_SESSION.headers = {
|
||
|
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0",
|
||
|
"Connection": "keep-alive",
|
||
|
"Referer": "https://musify.club/"
|
||
|
}
|
||
|
API_SESSION.proxies = shared.proxies
|
||
|
|
||
|
SOURCE_TYPE = SourcePages.MUSIFY
|
||
|
|
||
|
@classmethod
|
||
|
def search_by_query(cls, query: str) -> Options:
|
||
|
query_obj = cls.Query(query)
|
||
|
|
||
|
if query_obj.is_raw:
|
||
|
return cls.simple_search(query_obj)
|
||
|
return cls.advanced_search(query_obj)
|
||
|
|
||
|
@classmethod
|
||
|
def advanced_search(cls, query: Page.Query) -> Options:
|
||
|
if query.song is not None:
|
||
|
return Options(cls.search_for_song(query=query))
|
||
|
if query.album is not None:
|
||
|
return Options(cls.search_for_album(query=query))
|
||
|
if query.artist is not None:
|
||
|
return Options(cls.search_for_artist(query=query))
|
||
|
return Options
|
||
|
|
||
|
@classmethod
|
||
|
def search_for_song(cls, query: Page.Query) -> List[Song]:
|
||
|
return []
|
||
|
|
||
|
@classmethod
|
||
|
def search_for_album(cls, query: Page.Query) -> List[Album]:
|
||
|
return []
|
||
|
|
||
|
@classmethod
|
||
|
def search_for_artist(cls, query: Page.Query) -> List[Artist]:
|
||
|
return []
|
||
|
|
||
|
@classmethod
|
||
|
def simple_search(cls, query: Page.Query) -> List[Artist]:
|
||
|
return []
|
||
|
|
||
|
@classmethod
|
||
|
def fetch_album_details(cls, album: Album, flat: bool = False) -> Album:
|
||
|
|
||
|
return album
|
||
|
|
||
|
@classmethod
|
||
|
def fetch_song_details(cls, song: Song, flat: bool = False) -> Song:
|
||
|
source_list = song.source_collection.get_sources_from_page(cls.SOURCE_TYPE)
|
||
|
if len(source_list) == 0:
|
||
|
return song
|
||
|
|
||
|
"""
|
||
|
TODO
|
||
|
lyrics
|
||
|
"""
|
||
|
|
||
|
return song
|