]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/tubitv.py
6d78b5dfea0030f125062ad8ef46a1c6e731e4ea
2 from __future__
import unicode_literals
7 from .common
import InfoExtractor
8 from ..compat
import compat_urllib_parse
16 class TubiTvIE(InfoExtractor
):
17 _VALID_URL
= r
'https?://(?:www\.)?tubitv\.com/video\?id=(?P<id>[0-9]+)'
18 _LOGIN_URL
= 'http://tubitv.com/login'
19 _NETRC_MACHINE
= 'tubitv'
21 'url': 'http://tubitv.com/video?id=54411&title=The_Kitchen_Musical_-_EP01',
25 'title': 'The Kitchen Musical - EP01',
26 'thumbnail': 're:^https?://.*\.png$',
27 'description': 'md5:37532716166069b353e8866e71fefae7',
31 'skip_download': 'HLS download',
36 (username
, password
) = self
._get
_login
_info
()
44 payload
= compat_urllib_parse
.urlencode(form_data
).encode('utf-8')
45 request
= sanitized_Request(self
._LOGIN
_URL
, payload
)
46 request
.add_header('Content-Type', 'application/x-www-form-urlencoded')
47 login_page
= self
._download
_webpage
(
48 request
, None, False, 'Wrong login info')
49 if not re
.search(r
'id="tubi-logout"', login_page
):
51 'Login failed (invalid username/password)', expected
=True)
53 def _real_initialize(self
):
56 def _real_extract(self
, url
):
57 video_id
= self
._match
_id
(url
)
59 webpage
= self
._download
_webpage
(url
, video_id
)
60 if re
.search(r
"<(?:DIV|div) class='login-required-screen'>", webpage
):
61 self
.raise_login_required('This video requires login')
63 title
= self
._og
_search
_title
(webpage
)
64 description
= self
._og
_search
_description
(webpage
)
65 thumbnail
= self
._og
_search
_thumbnail
(webpage
)
66 duration
= int_or_none(self
._html
_search
_meta
(
67 'video:duration', webpage
, 'duration'))
69 apu
= self
._search
_regex
(r
"apu='([^']+)'", webpage
, 'apu')
70 m3u8_url
= codecs
.decode(apu
, 'rot_13')[::-1]
71 formats
= self
._extract
_m
3u8_formats
(m3u8_url
, video_id
, ext
='mp4')
77 'thumbnail': thumbnail
,
78 'description': description
,