Compare commits
	
		
			3 Commits
		
	
	
		
			d4fe99ffc7
			...
			feature/mu
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 265c9f462f | |||
| 780daac0ef | |||
| 465af49057 | 
| @@ -30,7 +30,7 @@ from ..utils.exception import MKMissingNameException | ||||
| from ..utils.exception.download import UrlNotFoundException | ||||
| from ..utils.shared import DEBUG_PAGES | ||||
|  | ||||
| from ..pages import Page, EncyclopaediaMetallum, Musify, YouTube, YoutubeMusic, Bandcamp, Genius, INDEPENDENT_DB_OBJECTS | ||||
| from ..pages import Page, EncyclopaediaMetallum, Musify, YouTube, YoutubeMusic, Bandcamp, Musicbrainz, Genius, INDEPENDENT_DB_OBJECTS | ||||
|  | ||||
|  | ||||
| ALL_PAGES: Set[Type[Page]] = { | ||||
| @@ -38,7 +38,8 @@ ALL_PAGES: Set[Type[Page]] = { | ||||
|     Genius, | ||||
|     Musify, | ||||
|     YoutubeMusic, | ||||
|     Bandcamp | ||||
|     Bandcamp, | ||||
|     Musicbrainz | ||||
| } | ||||
|  | ||||
| if youtube_settings["use_youtube_alongside_youtube_music"]: | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| from .encyclopaedia_metallum import EncyclopaediaMetallum | ||||
| from .musify import Musify | ||||
| from .musicbrainz import Musicbrainz | ||||
| from .youtube import YouTube | ||||
| from .youtube_music import YoutubeMusic | ||||
| from .bandcamp import Bandcamp | ||||
|   | ||||
| @@ -134,7 +134,7 @@ class Genius(Page): | ||||
|                 source_list=[source], | ||||
|                 artist_list=[self.parse_api_object(data.get("artist"))], | ||||
|                 artwork=artwork, | ||||
|                 date=ID3Timestamp(**data.get("release_date_components", {})), | ||||
|                 date=ID3Timestamp(**(data.get("release_date_components") or {})), | ||||
|             ) | ||||
|  | ||||
|         if object_type == "song": | ||||
|   | ||||
							
								
								
									
										145
									
								
								music_kraken/pages/musicbrainz.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								music_kraken/pages/musicbrainz.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| from collections import defaultdict | ||||
| from dataclasses import dataclass | ||||
| from enum import Enum | ||||
| from typing import List, Optional, Type, Union, Generator, Dict, Any | ||||
| from urllib.parse import urlparse | ||||
|  | ||||
| import pycountry | ||||
| import musicbrainzngs | ||||
| from bs4 import BeautifulSoup | ||||
|  | ||||
| from ..connection import Connection | ||||
| from .abstract import Page | ||||
| from ..utils.enums import SourceType, ALL_SOURCE_TYPES | ||||
| from ..utils.enums.album import AlbumType, AlbumStatus | ||||
| from ..objects import ( | ||||
|     Artist, | ||||
|     Source, | ||||
|     Song, | ||||
|     Album, | ||||
|     ID3Timestamp, | ||||
|     FormattedText, | ||||
|     Label, | ||||
|     Target, | ||||
|     DatabaseObject, | ||||
|     Lyrics, | ||||
|     Artwork | ||||
| ) | ||||
| from ..utils.config import logging_settings, main_settings | ||||
| from ..utils import string_processing, shared | ||||
| from ..utils.string_processing import clean_song_title | ||||
| from ..utils.support_classes.query import Query | ||||
| from ..utils.support_classes.download_result import DownloadResult | ||||
|  | ||||
|  | ||||
|  | ||||
| class Musicbrainz(Page): | ||||
|     SOURCE_TYPE = ALL_SOURCE_TYPES.MUSICBRAINZ | ||||
|  | ||||
|     HOST = "https://musicbrainz.org" | ||||
|  | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         musicbrainzngs.set_useragent("mk", "1") | ||||
|  | ||||
|         super().__init__(*args, **kwargs) | ||||
|      | ||||
|     def general_search(self, search_query: str) -> List[DatabaseObject]: | ||||
|         search_results = [] | ||||
|  | ||||
|         #Artist | ||||
|         search_results += self.artist_search(search_query).copy() | ||||
|  | ||||
|         #Album | ||||
|         search_results += self.album_search(search_query).copy() | ||||
|  | ||||
|         #Song | ||||
|         search_results += self.song_search(search_query).copy() | ||||
|  | ||||
|         return search_results | ||||
|  | ||||
|     def artist_search(self, search_query: str) -> List[Artist]: | ||||
|         artist_list = [] | ||||
|          | ||||
|         #Artist | ||||
|         artist_dict_list: list = musicbrainzngs.search_artists(search_query)['artist-list'] | ||||
|         artist_source_list: List[Source] = [] | ||||
|         for artist_dict in artist_dict_list: | ||||
|             artist_source_list.append(Source(self.SOURCE_TYPE, self.HOST + "/artist/" + artist_dict['id'])) | ||||
|             artist_list.append(Artist( | ||||
|                 name=artist_dict['name'], | ||||
|                 source_list=artist_source_list | ||||
|             )) | ||||
|    | ||||
|         return artist_list | ||||
|  | ||||
|     def song_search(self, search_query: str) -> List[Song]: | ||||
|         song_list = [] | ||||
|  | ||||
|         #Song | ||||
|         song_dict_list: list = musicbrainzngs.search_recordings(search_query)['recording-list'] | ||||
|         song_source_list: List[Source] = []  | ||||
|         for song_dict in song_dict_list: | ||||
|             song_source_list.append(Source(self.SOURCE_TYPE, self.HOST + "/recording/" + song_dict['id']))  | ||||
|             song_list.append(Song( | ||||
|                 title=song_dict['title'], | ||||
|                 source_list=song_source_list | ||||
|             ))  | ||||
|  | ||||
|         return song_list | ||||
|      | ||||
|     def album_search(self, search_query: str) -> List[Album]: | ||||
|         album_list = [] | ||||
|  | ||||
|         #Album | ||||
|         album_dict_list: list = musicbrainzngs.search_release_groups(search_query)['release-group-list'] | ||||
|         album_source_list: List[Source] = [] | ||||
|         for album_dict in album_dict_list: | ||||
|             album_source_list.append(Source(self.SOURCE_TYPE, self.HOST + "/release-group/" + album_dict['id'])) | ||||
|             album_list.append(Album( | ||||
|                 title=album_dict['title'], | ||||
|                 source_list=album_source_list | ||||
|             )) | ||||
|  | ||||
|         return album_list | ||||
|  | ||||
|  | ||||
|     def fetch_album(self, source: Source, stop_at_level: int = 1) -> Album: | ||||
|         album_list = [] | ||||
|  | ||||
|         #Album | ||||
|         album_dict_list: list = musicbrainzngs.search_release_groups(search_query)['release-group-list'] | ||||
|         album_source_list: List[Source] = [] | ||||
|         for album_dict in album_dict_list: | ||||
|             album_source_list.append(Source(self.SOURCE_TYPE, self.HOST + "/release-group/" + album_dict['id'])) | ||||
|             album_list.append(Album( | ||||
|                 title=album_dict['title'], | ||||
|                 source_list=album_source_list | ||||
|             )) | ||||
|  | ||||
|     def fetch_artist(self, source: Source, stop_at_level: int = 1) -> Artist: | ||||
|         artist_list = [] | ||||
|          | ||||
|         #Artist | ||||
|         artist_dict_list: list = musicbrainzngs.search_artists(search_query)['artist-list'] | ||||
|         artist_source_list: List[Source] = [] | ||||
|         for artist_dict in artist_dict_list: | ||||
|             artist_source_list.append(Source(self.SOURCE_TYPE, self.HOST + "/artist/" + artist_dict['id'])) | ||||
|             artist_list.append(Artist( | ||||
|                 name=artist_dict['name'], | ||||
|                 source_list=artist_source_list, | ||||
|             )) | ||||
|  | ||||
|     def fetch_song(self, source: Source, stop_at_level: int = 1) -> Song: | ||||
|         song_list = [] | ||||
|  | ||||
|         #Song | ||||
|         song_dict_list: list = musicbrainzngs.search_recordings(search_query)['recording-list'] | ||||
|         song_source_list: List[Source] = []  | ||||
|         for song_dict in song_dict_list: | ||||
|             song_source_list.append(Source(self.SOURCE_TYPE, self.HOST + "/recording/" + song_dict['id']))  | ||||
|             song_list.append(Song( | ||||
|                 title=song_dict['title'], | ||||
|                 source_list=song_source_list | ||||
|             ))  | ||||
|      | ||||
|          | ||||
| @@ -59,6 +59,11 @@ Reference for the logging formats: https://docs.python.org/3/library/logging.htm | ||||
|         description="The logger for the musify scraper.", | ||||
|         default_value="musify" | ||||
|     ), | ||||
|     LoggerAttribute( | ||||
|         name="musicbrainz_logger", | ||||
|         description="The logger for the musicbrainz scraper.", | ||||
|         default_value="musicbrainz" | ||||
|     ), | ||||
|     LoggerAttribute( | ||||
|         name="youtube_logger", | ||||
|         description="The logger for the youtube scraper.", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user