mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-09 14:11:55 -04:00
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
"""Utility functions for RipCore."""
|
|
|
|
import re
|
|
from typing import Tuple
|
|
|
|
from streamrip.constants import AGENT
|
|
from streamrip.utils import gen_threadsafe_session
|
|
|
|
interpreter_artist_id_regex = re.compile(
|
|
r"https?://www\.qobuz\.com/\w\w-\w\w/interpreter/[-\w]+/(?P<artistId>[0-9]+)"
|
|
)
|
|
interpreter_artist_regex = re.compile(r"getSimilarArtist\(\s*'(\w+)'")
|
|
|
|
|
|
def extract_interpreter_url(url: str) -> str:
|
|
"""Extract artist ID from a Qobuz interpreter url.
|
|
|
|
:param url: Urls of the form "https://www.qobuz.com/us-en/interpreter/{artist}/download-streaming-albums"
|
|
or "https://www.qobuz.com/us-en/interpreter/the-last-shadow-puppets/{artistId}}"
|
|
:type url: str
|
|
:rtype: str
|
|
"""
|
|
url_match = interpreter_artist_id_regex.search(url)
|
|
if url_match:
|
|
return url_match.group("artistId")
|
|
|
|
session = gen_threadsafe_session({"User-Agent": AGENT})
|
|
r = session.get(url)
|
|
match = interpreter_artist_regex.search(r.text)
|
|
if match:
|
|
return match.group(1)
|
|
|
|
raise Exception(
|
|
"Unable to extract artist id from interpreter url. Use a "
|
|
"url that contains an artist id."
|
|
)
|
|
|
|
|
|
deezer_id_link_regex = re.compile(
|
|
r"https://www\.deezer\.com/[a-z]{2}/(album|artist|playlist|track)/(\d+)"
|
|
)
|
|
|
|
|
|
def extract_deezer_dynamic_link(url: str) -> Tuple[str, str]:
|
|
"""Extract a deezer url that includes an ID from a deezer.page.link url.
|
|
|
|
:param url:
|
|
:type url: str
|
|
:rtype: Tuple[str, str]
|
|
"""
|
|
session = gen_threadsafe_session({"User-Agent": AGENT})
|
|
r = session.get(url)
|
|
match = deezer_id_link_regex.search(r.text)
|
|
if match:
|
|
return match.group(1), match.group(2)
|
|
|
|
raise Exception("Unable to extract Deezer dynamic link.")
|