on24.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from .common import InfoExtractor
  2. from ..utils import (
  3. int_or_none,
  4. strip_or_none,
  5. try_get,
  6. urljoin,
  7. )
  8. class On24IE(InfoExtractor):
  9. IE_NAME = 'on24'
  10. IE_DESC = 'ON24'
  11. _VALID_URL = r'''(?x)
  12. https?://event\.on24\.com/(?:
  13. wcc/r/(?P<id_1>\d{7})/(?P<key_1>[0-9A-F]{32})|
  14. eventRegistration/(?:console/EventConsoleApollo|EventLobbyServlet\?target=lobby30)
  15. \.jsp\?(?:[^/#?]*&)?eventid=(?P<id_2>\d{7})[^/#?]*&key=(?P<key_2>[0-9A-F]{32})
  16. )'''
  17. _TESTS = [{
  18. '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',
  19. 'info_dict': {
  20. 'id': '2197467',
  21. 'ext': 'wav',
  22. 'title': 'Pearson Test of English General/Pearson English International Certificate Teacher Training Guide',
  23. 'upload_date': '20200219',
  24. 'timestamp': 1582149600.0,
  25. 'view_count': int,
  26. },
  27. }, {
  28. 'url': 'https://event.on24.com/wcc/r/2639291/82829018E813065A122363877975752E?mode=login&email=johnsmith@gmail.com',
  29. 'only_matching': True,
  30. }, {
  31. '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',
  32. 'only_matching': True,
  33. }]
  34. def _real_extract(self, url):
  35. mobj = self._match_valid_url(url)
  36. event_id = mobj.group('id_1') or mobj.group('id_2')
  37. event_key = mobj.group('key_1') or mobj.group('key_2')
  38. event_data = self._download_json(
  39. 'https://event.on24.com/apic/utilApp/EventConsoleCachedServlet',
  40. event_id, query={
  41. 'eventId': event_id,
  42. 'displayProfile': 'player',
  43. 'key': event_key,
  44. 'contentType': 'A',
  45. })
  46. event_id = str(try_get(event_data, lambda x: x['presentationLogInfo']['eventid'])) or event_id
  47. language = event_data.get('localelanguagecode')
  48. formats = []
  49. for media in event_data.get('mediaUrlInfo', []):
  50. media_url = urljoin('https://event.on24.com/media/news/corporatevideo/events/', str(media.get('url')))
  51. if not media_url:
  52. continue
  53. media_type = media.get('code')
  54. if media_type == 'fhvideo1':
  55. formats.append({
  56. 'format_id': 'video',
  57. 'url': media_url,
  58. 'language': language,
  59. 'ext': 'mp4',
  60. 'vcodec': 'avc1.640020',
  61. 'acodec': 'mp4a.40.2',
  62. })
  63. elif media_type == 'audio':
  64. formats.append({
  65. 'format_id': 'audio',
  66. 'url': media_url,
  67. 'language': language,
  68. 'ext': 'wav',
  69. 'vcodec': 'none',
  70. 'acodec': 'wav',
  71. })
  72. return {
  73. 'id': event_id,
  74. 'title': strip_or_none(event_data.get('description')),
  75. 'timestamp': int_or_none(try_get(event_data, lambda x: x['session']['startdate']), 1000),
  76. 'webpage_url': f'https://event.on24.com/wcc/r/{event_id}/{event_key}',
  77. 'view_count': event_data.get('registrantcount'),
  78. 'formats': formats,
  79. }