]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/on24.py
[cleanup] Add more ruff rules (#10149)
[yt-dlp.git] / yt_dlp / extractor / on24.py
CommitLineData
693ec744
DA
1from .common import InfoExtractor
2from ..utils import (
3 int_or_none,
4 strip_or_none,
5 try_get,
6 urljoin,
7)
8
9
10class On24IE(InfoExtractor):
11 IE_NAME = 'on24'
12 IE_DESC = 'ON24'
13
14 _VALID_URL = r'''(?x)
15 https?://event\.on24\.com/(?:
16 wcc/r/(?P<id_1>\d{7})/(?P<key_1>[0-9A-F]{32})|
17 eventRegistration/(?:console/EventConsoleApollo|EventLobbyServlet\?target=lobby30)
18 \.jsp\?(?:[^/#?]*&)?eventid=(?P<id_2>\d{7})[^/#?]*&key=(?P<key_2>[0-9A-F]{32})
19 )'''
20
21 _TESTS = [{
22 'url': 'https://event.on24.com/eventRegistration/console/EventConsoleApollo.jsp?uimode=nextgeneration&eventid=2197467&sessionid=1&key=5DF57BE53237F36A43B478DD36277A84&contenttype=A&eventuserid=305999&playerwidth=1000&playerheight=650&caller=previewLobby&text_language_id=en&format=fhaudio&newConsole=false',
23 'info_dict': {
24 'id': '2197467',
25 'ext': 'wav',
26 'title': 'Pearson Test of English General/Pearson English International Certificate Teacher Training Guide',
27 'upload_date': '20200219',
28 'timestamp': 1582149600.0,
29 'view_count': int,
add96eb9 30 },
693ec744
DA
31 }, {
32 'url': 'https://event.on24.com/wcc/r/2639291/82829018E813065A122363877975752E?mode=login&email=johnsmith@gmail.com',
33 'only_matching': True,
34 }, {
35 'url': 'https://event.on24.com/eventRegistration/console/EventConsoleApollo.jsp?&eventid=2639291&sessionid=1&username=&partnerref=&format=fhvideo1&mobile=&flashsupportedmobiledevice=&helpcenter=&key=82829018E813065A122363877975752E&newConsole=true&nxChe=true&newTabCon=true&text_language_id=en&playerwidth=748&playerheight=526&eventuserid=338788762&contenttype=A&mediametricsessionid=384764716&mediametricid=3558192&usercd=369267058&mode=launch',
36 'only_matching': True,
37 }]
38
39 def _real_extract(self, url):
40 mobj = self._match_valid_url(url)
41 event_id = mobj.group('id_1') or mobj.group('id_2')
42 event_key = mobj.group('key_1') or mobj.group('key_2')
43
44 event_data = self._download_json(
45 'https://event.on24.com/apic/utilApp/EventConsoleCachedServlet',
46 event_id, query={
47 'eventId': event_id,
48 'displayProfile': 'player',
49 'key': event_key,
add96eb9 50 'contentType': 'A',
693ec744
DA
51 })
52 event_id = str(try_get(event_data, lambda x: x['presentationLogInfo']['eventid'])) or event_id
53 language = event_data.get('localelanguagecode')
54
55 formats = []
56 for media in event_data.get('mediaUrlInfo', []):
57 media_url = urljoin('https://event.on24.com/media/news/corporatevideo/events/', str(media.get('url')))
58 if not media_url:
59 continue
60 media_type = media.get('code')
61 if media_type == 'fhvideo1':
62 formats.append({
63 'format_id': 'video',
64 'url': media_url,
65 'language': language,
66 'ext': 'mp4',
67 'vcodec': 'avc1.640020',
68 'acodec': 'mp4a.40.2',
69 })
70 elif media_type == 'audio':
71 formats.append({
72 'format_id': 'audio',
73 'url': media_url,
74 'language': language,
75 'ext': 'wav',
76 'vcodec': 'none',
add96eb9 77 'acodec': 'wav',
693ec744 78 })
693ec744
DA
79
80 return {
81 'id': event_id,
82 'title': strip_or_none(event_data.get('description')),
83 'timestamp': int_or_none(try_get(event_data, lambda x: x['session']['startdate']), 1000),
84 'webpage_url': f'https://event.on24.com/wcc/r/{event_id}/{event_key}',
85 'view_count': event_data.get('registrantcount'),
86 'formats': formats,
87 }