Compare commits

..

2 Commits

Author SHA1 Message Date
c-basalt
63654ea6f9 use early exit 2024-02-10 11:51:28 -05:00
c-basalt
ef958d16a6
Change to separate query
Co-authored-by: Simon Sawicki <accounts@grub4k.xyz>
2024-02-10 11:47:23 -05:00

View File

@ -196,7 +196,10 @@ class MicrosoftLearnIE(MicrosoftMediusBaseIE):
def _entries(self, url_base, video_id): def _entries(self, url_base, video_id):
skip = 0 skip = 0
while True: while True:
playlist_info = self._download_json(f'{url_base}&$skip={skip}', video_id, f'Downloading entries {skip}') playlist_info = self._download_json(url_base, video_id, f'Downloading entries {skip}', query={
'locale': 'en-us',
'$skip': skip,
})
items = traverse_obj(playlist_info, ( items = traverse_obj(playlist_info, (
'results', ..., 'url', {lambda x: self.url_result(f'https://learn.microsoft.com/en-us{x}')})) 'results', ..., 'url', {lambda x: self.url_result(f'https://learn.microsoft.com/en-us{x}')}))
yield from items yield from items
@ -214,34 +217,34 @@ class MicrosoftLearnIE(MicrosoftMediusBaseIE):
'description': self._og_search_description(webpage), 'description': self._og_search_description(webpage),
} }
if slug: if not slug:
if video_type == 'events': url_base = f'https://learn.microsoft.com/api/contentbrowser/search/{video_type}/{series}/{"sessions" if video_type == "events" else "episodes"}'
return self.url_result(
self._search_regex(r'<meta\s+name="externalVideoUrl"\s+content="([^"]+)"', webpage, 'videoUrl'), url_transparent=True, **metainfo, **{
'timestamp': parse_iso8601(self._search_regex(
r'<meta\s+name="startDate"\s+content="([^"]+)"', webpage, 'date', default=None)),
})
else:
entry_id = self._search_regex(r'<meta name="entryId" content="([^"]+)"', webpage, 'entryId')
video_info = self._download_json(
f'https://learn.microsoft.com/api/video/public/v1/entries/{entry_id}', video_id)
return {
'id': entry_id,
'formats': self._extract_ism(video_info['publicVideo']['adaptiveVideoUrl'], video_id),
'subtitles': self._sub_to_dict(traverse_obj(video_info, ('publicVideo', 'captions', ..., {
'tag': ('language', {str}),
'url': ('url', {url_or_none}),
}))),
**metainfo,
**traverse_obj(video_info, {
'timestamp': ('createTime', {parse_iso8601}),
'thumbnails': ('publicVideo', 'thumbnailOtherSizes', ..., {lambda x: {'url': x}}),
}),
}
else:
url_base = f'https://learn.microsoft.com/api/contentbrowser/search/{video_type}/{series}/{"sessions" if video_type == "events" else "episodes"}?locale=en-us'
return self.playlist_result(self._entries(url_base, video_id), video_id, **metainfo) return self.playlist_result(self._entries(url_base, video_id), video_id, **metainfo)
if video_type == 'events':
return self.url_result(
self._search_regex(r'<meta\s+name="externalVideoUrl"\s+content="([^"]+)"', webpage, 'videoUrl'), url_transparent=True, **metainfo, **{
'timestamp': parse_iso8601(self._search_regex(
r'<meta\s+name="startDate"\s+content="([^"]+)"', webpage, 'date', default=None)),
})
entry_id = self._search_regex(r'<meta name="entryId" content="([^"]+)"', webpage, 'entryId')
video_info = self._download_json(
f'https://learn.microsoft.com/api/video/public/v1/entries/{entry_id}', video_id)
return {
'id': entry_id,
'formats': self._extract_ism(video_info['publicVideo']['adaptiveVideoUrl'], video_id),
'subtitles': self._sub_to_dict(traverse_obj(video_info, ('publicVideo', 'captions', ..., {
'tag': ('language', {str}),
'url': ('url', {url_or_none}),
}))),
**metainfo,
**traverse_obj(video_info, {
'timestamp': ('createTime', {parse_iso8601}),
'thumbnails': ('publicVideo', 'thumbnailOtherSizes', ..., {lambda x: {'url': x}}),
}),
}
class MicrosoftBuildIE(MicrosoftMediusBaseIE): class MicrosoftBuildIE(MicrosoftMediusBaseIE):
_VALID_URL = [ _VALID_URL = [