3 from .common
import InfoExtractor
7 get_element_html_by_id
,
10 from ..utils
.traversal
import traverse_obj
13 class FathomIE(InfoExtractor
):
14 _VALID_URL
= r
'https?://(?:www\.)?fathom\.video/share/(?P<id>[^/?#&]+)'
16 'url': 'https://fathom.video/share/G9mkjkspnohVVZ_L5nrsoPycyWcB8y7s',
17 'md5': '0decd5343b8f30ae268625e79a02b60f',
21 'title': 'eCom Inucbator - Coaching Session',
22 'duration': 8125.380507,
23 'timestamp': 1699048914,
24 'upload_date': '20231103',
27 'url': 'https://fathom.video/share/mEws3bybftHL2QLymxYEDeE21vtLxGVm',
28 'md5': '4f5cb382126c22d1aba8a939f9c49690',
32 'title': 'Jon, Lawrence, Neman chat about practice',
33 'duration': 3571.517847,
34 'timestamp': 1698933600,
35 'upload_date': '20231102',
39 def _real_extract(self
, url
):
40 display_id
= self
._match
_id
(url
)
41 webpage
= self
._download
_webpage
(url
, display_id
)
43 get_element_html_by_id('app', webpage
), ({extract_attributes}
, 'data-page', {json
.loads
}, 'props'))
44 video_id
= str(props
['call']['id'])
48 'formats': self
._extract
_m
3u8_formats
(props
['call']['video_url'], video_id
, 'mp4'),
49 **traverse_obj(props
, {
50 'title': ('head', 'title', {str}
),
51 'duration': ('duration', {float_or_none}
),
52 'timestamp': ('call', 'started_at', {parse_iso8601}
),