fix quizzes in info

This commit is contained in:
Puyodead1 2023-10-20 16:53:56 -04:00
parent a461f5fc86
commit 935b2a41f3
No known key found for this signature in database
GPG Key ID: A4FA4FEC0DD353FC

179
main.py
View File

@ -368,7 +368,6 @@ class Udemy:
cj = browser_cookie3.vivaldi() cj = browser_cookie3.vivaldi()
def _get_quiz(self, quiz_id): def _get_quiz(self, quiz_id):
print(portal_name)
self.session._headers.update( self.session._headers.update(
{ {
"Host": "{portal_name}.udemy.com".format(portal_name=portal_name), "Host": "{portal_name}.udemy.com".format(portal_name=portal_name),
@ -376,7 +375,6 @@ class Udemy:
} }
) )
url = QUIZ_URL.format(portal_name=portal_name, quiz_id=quiz_id) url = QUIZ_URL.format(portal_name=portal_name, quiz_id=quiz_id)
print(url)
try: try:
resp = self.session._get(url).json() resp = self.session._get(url).json()
except conn_error as error: except conn_error as error:
@ -989,79 +987,92 @@ class Udemy:
else: else:
logger.warning(f"Unknown asset type: {asset_type}") logger.warning(f"Unknown asset type: {asset_type}")
stream_urls = asset.get("stream_urls") if asset != None:
if stream_urls != None: stream_urls = asset.get("stream_urls")
# not encrypted if stream_urls != None:
if stream_urls and isinstance(stream_urls, dict): # not encrypted
sources = stream_urls.get("Video") if stream_urls and isinstance(stream_urls, dict):
tracks = asset.get("captions") sources = stream_urls.get("Video")
# duration = asset.get("time_estimation") tracks = asset.get("captions")
sources = self._extract_sources(sources, skip_hls) # duration = asset.get("time_estimation")
subtitles = self._extract_subtitles(tracks) sources = self._extract_sources(sources, skip_hls)
sources_count = len(sources) subtitles = self._extract_subtitles(tracks)
subtitle_count = len(subtitles) sources_count = len(sources)
lecture.pop("data") # remove the raw data object after processing subtitle_count = len(subtitles)
lecture = { lecture.pop("data") # remove the raw data object after processing
**lecture, lecture = {
"assets": retVal, **lecture,
"assets_count": len(retVal), "assets": retVal,
"sources": sources, "assets_count": len(retVal),
"subtitles": subtitles, "sources": sources,
"subtitle_count": subtitle_count, "subtitles": subtitles,
"sources_count": sources_count, "subtitle_count": subtitle_count,
"is_encrypted": False, "sources_count": sources_count,
"asset_id": asset.get("id"), "is_encrypted": False,
} "asset_id": asset.get("id"),
"type": asset.get("asset_type")
}
else:
lecture.pop("data") # remove the raw data object after processing
lecture = {
**lecture,
"html_content": asset.get("body"),
"extension": "html",
"assets": retVal,
"assets_count": len(retVal),
"subtitle_count": 0,
"sources_count": 0,
"is_encrypted": False,
"asset_id": asset.get("id"),
"type": asset.get("asset_type")
}
else: else:
lecture.pop("data") # remove the raw data object after processing # encrypted
lecture = { media_sources = asset.get("media_sources")
**lecture, if media_sources and isinstance(media_sources, list):
"html_content": asset.get("body"), sources = self._extract_media_sources(media_sources)
"extension": "html", tracks = asset.get("captions")
"assets": retVal, # duration = asset.get("time_estimation")
"assets_count": len(retVal), subtitles = self._extract_subtitles(tracks)
"subtitle_count": 0, sources_count = len(sources)
"sources_count": 0, subtitle_count = len(subtitles)
"is_encrypted": False, lecture.pop("data") # remove the raw data object after processing
"asset_id": asset.get("id"), lecture = {
} **lecture,
else: # "duration": duration,
# encrypted "assets": retVal,
media_sources = asset.get("media_sources") "assets_count": len(retVal),
if media_sources and isinstance(media_sources, list): "video_sources": sources,
sources = self._extract_media_sources(media_sources) "subtitles": subtitles,
tracks = asset.get("captions") "subtitle_count": subtitle_count,
# duration = asset.get("time_estimation") "sources_count": sources_count,
subtitles = self._extract_subtitles(tracks) "is_encrypted": True,
sources_count = len(sources) "asset_id": asset.get("id"),
subtitle_count = len(subtitles) "type": asset.get("asset_type")
lecture.pop("data") # remove the raw data object after processing }
lecture = {
**lecture,
# "duration": duration,
"assets": retVal,
"assets_count": len(retVal),
"video_sources": sources,
"subtitles": subtitles,
"subtitle_count": subtitle_count,
"sources_count": sources_count,
"is_encrypted": True,
"asset_id": asset.get("id"),
}
else: else:
lecture.pop("data") # remove the raw data object after processing lecture.pop("data") # remove the raw data object after processing
lecture = { lecture = {
**lecture, **lecture,
"html_content": asset.get("body"), "html_content": asset.get("body"),
"extension": "html", "extension": "html",
"assets": retVal, "assets": retVal,
"assets_count": len(retVal), "assets_count": len(retVal),
"subtitle_count": 0, "subtitle_count": 0,
"sources_count": 0, "sources_count": 0,
"is_encrypted": False, "is_encrypted": False,
"asset_id": asset.get("id"), "asset_id": asset.get("id"),
} "type": asset.get("asset_type")
}
else:
lecture = {
**lecture,
"assets": retVal,
"assets_count": len(retVal),
"asset_id": lecture_data.get("id"),
"type": lecture_data.get("type")
}
return lecture return lecture
@ -1845,30 +1856,38 @@ def _print_course_info(udemy: Udemy, udemy_object: dict):
parsed_lecture = udemy._parse_lecture(lecture) parsed_lecture = udemy._parse_lecture(lecture)
lecture_sources = parsed_lecture.get("sources") lecture_sources = parsed_lecture.get("sources")
lecture_is_encrypted = parsed_lecture.get("is_encrypted") lecture_is_encrypted = parsed_lecture.get("is_encrypted", None)
lecture_extension = parsed_lecture.get("extension") lecture_extension = parsed_lecture.get("extension")
lecture_asset_count = parsed_lecture.get("assets_count") lecture_asset_count = parsed_lecture.get("assets_count")
lecture_subtitles = parsed_lecture.get("subtitles") lecture_subtitles = parsed_lecture.get("subtitles")
lecture_video_sources = parsed_lecture.get("video_sources") lecture_video_sources = parsed_lecture.get("video_sources")
lecture_type = parsed_lecture.get("type")
lecture_qualities = []
if lecture_sources: if lecture_sources:
lecture_sources = sorted(lecture_sources, key=lambda x: int(x.get("height")), reverse=True) lecture_sources = sorted(lecture_sources, key=lambda x: int(x.get("height")), reverse=True)
if lecture_video_sources: if lecture_video_sources:
lecture_video_sources = sorted(lecture_video_sources, key=lambda x: int(x.get("height")), reverse=True) lecture_video_sources = sorted(lecture_video_sources, key=lambda x: int(x.get("height")), reverse=True)
if lecture_is_encrypted: if lecture_is_encrypted and lecture_video_sources != None:
lecture_qualities = ["{}@{}x{}".format(x.get("type"), x.get("width"), x.get("height")) for x in lecture_video_sources] lecture_qualities = ["{}@{}x{}".format(x.get("type"), x.get("width"), x.get("height")) for x in lecture_video_sources]
elif not lecture_is_encrypted and lecture_sources: elif lecture_is_encrypted == False and lecture_sources != None:
lecture_qualities = ["{}@{}x{}".format(x.get("type"), x.get("height"), x.get("width")) for x in lecture_sources] lecture_qualities = ["{}@{}x{}".format(x.get("type"), x.get("height"), x.get("width")) for x in lecture_sources]
if lecture_extension: if lecture_extension:
continue continue
logger.info(" > Lecture: {} ({} of {})".format(lecture_title, lecture_index, chapter_lecture_count)) logger.info(" > Lecture: {} ({} of {})".format(lecture_title, lecture_index, chapter_lecture_count))
logger.info(" > DRM: {}".format(lecture_is_encrypted)) logger.info(" > Type: {}".format(lecture_type))
logger.info(" > Asset Count: {}".format(lecture_asset_count)) if lecture_is_encrypted != None:
logger.info(" > Captions: {}".format(", ".join([x.get("language") for x in lecture_subtitles]))) logger.info(" > DRM: {}".format(lecture_is_encrypted))
logger.info(" > Qualities: {}".format(lecture_qualities)) if lecture_asset_count:
logger.info(" > Asset Count: {}".format(lecture_asset_count))
if lecture_subtitles:
logger.info(" > Captions: {}".format(", ".join([x.get("language") for x in lecture_subtitles])))
if lecture_qualities:
logger.info(" > Qualities: {}".format(lecture_qualities))
if chapter_index != chapter_count: if chapter_index != chapter_count:
logger.info("==========================================") logger.info("==========================================")