fit get_type and get_id functions into one

using both needlessly searched the url twice
This commit is contained in:
nathannathant 2021-03-02 16:14:22 -08:00
parent c995d9caf8
commit e45ce11439

View File

@ -4,6 +4,7 @@ import re
import string import string
import sys import sys
import time import time
from typing import Tuple
import requests import requests
from bs4 import BeautifulSoup as bso from bs4 import BeautifulSoup as bso
@ -98,29 +99,13 @@ class QobuzDL:
os.makedirs(fix, exist_ok=True) os.makedirs(fix, exist_ok=True)
return fix return fix
def get_id(self, url): def get_url_info(url: str) -> Tuple[str, str]:
return re.match( r = re.search(
r"https?://(?:w{0,3}|play|open)\.qobuz\.com/(?:(?:album|track" r"(?:https:\/\/(?:w{3}|open|play)\.qobuz\.com)?(?:\/[a-z]{2}-[a-z]{2})"
r"|artist|playlist|label)/|[a-z]{2}-[a-z]{2}/album/-?\w+(?:-\w+)*" r"?\/(album|artist|track|playlist|label)(?:\/[-\w\d]+)?\/([\w\d]+)",
r"-?/|user/library/favorites/)(\w+)",
url, url,
).group(1) )
return r.groups()
def get_type(self, url):
if re.match(r"https?", url) is not None:
url_type = url.split("/")[3]
if url_type not in ["album", "artist", "playlist", "track", "label"]:
if url_type == "user":
url_type = url.split("/")[-1]
else:
# url is from Qobuz store
# e.g. "https://www.qobuz.com/us-en/album/..."
url_type = url.split("/")[4]
else:
# url missing base
# e.g. "/us-en/album/{artist}/{id}"
url_type = url.split("/")[2]
return url_type
def download_from_id(self, item_id, album=True, alt_path=None): def download_from_id(self, item_id, album=True, alt_path=None):
if handle_download_id(self.downloads_db, item_id, add_id=False): if handle_download_id(self.downloads_db, item_id, add_id=False):
@ -167,9 +152,8 @@ class QobuzDL:
"track": {"album": False, "func": None, "iterable_key": None}, "track": {"album": False, "func": None, "iterable_key": None},
} }
try: try:
url_type = self.get_type(url) url_type, item_id = self.get_info(url)
type_dict = possibles[url_type] type_dict = possibles[url_type]
item_id = self.get_id(url)
except (KeyError, IndexError): except (KeyError, IndexError):
logger.info( logger.info(
f'{RED}Invalid url: "{url}". Use urls from ' "https://play.qobuz.com!" f'{RED}Invalid url: "{url}". Use urls from ' "https://play.qobuz.com!"
@ -423,7 +407,7 @@ class QobuzDL:
) )
for i in track_list: for i in track_list:
track_id = self.get_id(self.search_by_type(i, "track", 1, lucky=True)[0]) track_id = self.get_url_info(self.search_by_type(i, "track", 1, lucky=True)[0])[1]
if track_id: if track_id:
self.download_from_id(track_id, False, pl_directory) self.download_from_id(track_id, False, pl_directory)