1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
import re
from datetime import date
from typing import Literal
from ytmusicapi.exceptions import YTMusicUserError
LibraryOrderType = Literal["a_to_z", "z_to_a", "recently_added"]
def prepare_like_endpoint(rating):
if rating == "LIKE":
return "like/like"
elif rating == "DISLIKE":
return "like/dislike"
elif rating == "INDIFFERENT":
return "like/removelike"
else:
return None
def validate_order_parameter(order):
orders = ["a_to_z", "z_to_a", "recently_added"]
if order and order not in orders:
raise YTMusicUserError(
"Invalid order provided. Please use one of the following orders or leave out the parameter: "
+ ", ".join(orders)
)
def prepare_order_params(order: LibraryOrderType):
orders = ["a_to_z", "z_to_a", "recently_added"]
if order is not None:
# determine order_params via `.contents.singleColumnBrowseResultsRenderer.tabs[0].tabRenderer.content.sectionListRenderer.contents[1].itemSectionRenderer.header.itemSectionTabbedHeaderRenderer.endItems[1].dropdownRenderer.entries[].dropdownItemRenderer.onSelectCommand.browseEndpoint.params` of `/youtubei/v1/browse` response
order_params = ["ggMGKgQIARAA", "ggMGKgQIARAB", "ggMGKgQIABAB"]
return order_params[orders.index(order)]
def html_to_txt(html_text):
tags = re.findall("<[^>]+>", html_text)
for tag in tags:
html_text = html_text.replace(tag, "")
return html_text
def get_datestamp():
return (date.today() - date.fromtimestamp(0)).days
|