added some url parsing

This commit is contained in:
Hellow2 2023-03-30 12:00:39 +02:00
parent de2f326218
commit 21e81c82a3
3 changed files with 46 additions and 3 deletions

View File

@ -191,6 +191,15 @@ class Page:
music_object.compile(merge_into=True)
return music_object
@classmethod
def fetch_object_from_source(cls, source: Source):
obj_type = cls._get_type_of_url(source.url)
if obj_type is None:
return Artist()
return cls._fetch_object_from_source(source=source, obj_type=obj_type)
@classmethod
def _fetch_object_from_source(cls, source: Source, obj_type: Union[Type[Song], Type[Album], Type[Artist], Type[Label]], stop_at_level: int = 1):
@ -269,3 +278,7 @@ class Page:
@classmethod
def _fetch_label_from_source(cls, source: Source, stop_at_level: int = 1) -> Label:
return Label()
@classmethod
def _get_type_of_url(cls, url: str) -> Optional[Union[Type[Song], Type[Album], Type[Artist], Type[Label]]]:
return None

View File

@ -1,8 +1,9 @@
from collections import defaultdict
from typing import List, Optional, Dict
from typing import List, Optional, Dict, Type, Union
import requests
from bs4 import BeautifulSoup
import pycountry
from urllib.parse import urlparse
from ..utils.shared import (
ENCYCLOPAEDIA_METALLUM_LOGGER as LOGGER
@ -635,3 +636,21 @@ class EncyclopaediaMetallum(Page):
cls._fetch_lyrics(song_id=song_id)
]
)
@classmethod
def _get_type_of_url(cls, url: str) -> Optional[Union[Type[Song], Type[Album], Type[Artist], Type[Label]]]:
parsed_url = urlparse(url)
path: List[str] = parsed_url.path.split("/")
if "band" in path:
return Artist
if "bands" in path:
return Artist
if "albums" in path:
return Album
if "labels" in path:
return Label
return None

View File

@ -1,9 +1,8 @@
from collections import defaultdict
from typing import List, Optional, Union
from typing import List, Optional, Type, Union
import requests
from bs4 import BeautifulSoup
import pycountry
import time
from urllib.parse import urlparse
from enum import Enum
from dataclasses import dataclass
@ -880,3 +879,15 @@ class Musify(Page):
album.update_tracksort()
return album
@classmethod
def _get_type_of_url(cls, url: str) -> Optional[Union[Type[Song], Type[Album], Type[Artist], Type[Label]]]:
url: MusifyUrl = cls.parse_url(url)
if url.source_type == MusifyTypes.ARTIST:
return Artist
if url.source_type == MusifyTypes.RELEASE:
return Album
if url.source_type == MusifyTypes.SONG:
return Song
return None