mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-03 23:25:06 +00:00
[abc:iview] Fix extraction (closes #14711)
ABC dropped unmetering, so change to metered hls urls which require auth.
This commit is contained in:
parent
538d4f8681
commit
2e65e7db9e
1 changed files with 23 additions and 5 deletions
|
@ -1,6 +1,9 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
import hmac
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
|
@ -126,20 +129,35 @@ def _real_extract(self, url):
|
||||||
title = video_params.get('title') or video_params['seriesTitle']
|
title = video_params.get('title') or video_params['seriesTitle']
|
||||||
stream = next(s for s in video_params['playlist'] if s.get('type') == 'program')
|
stream = next(s for s in video_params['playlist'] if s.get('type') == 'program')
|
||||||
|
|
||||||
format_urls = [
|
key = 'android.content.res.Resources'.encode('utf-8')
|
||||||
try_get(stream, lambda x: x['hds-unmetered'], compat_str)]
|
time_str = str(int(time.time()))
|
||||||
|
house_number = video_params.get('episodeHouseNumber')
|
||||||
|
path = '/auth/hls/sign?ts={0}&hn={1}&d=android-mobile'.format(
|
||||||
|
time_str, house_number)
|
||||||
|
sig = hmac.new(key, path.encode('utf-8'), hashlib.sha256).hexdigest()
|
||||||
|
auth_url = 'http://iview.abc.net.au{0}&sig={1}'.format(path, sig)
|
||||||
|
token = self._download_webpage(auth_url, video_id)
|
||||||
|
|
||||||
|
format_urls = []
|
||||||
|
|
||||||
|
def tokenize_url(url, token):
|
||||||
|
return ''.join([url, '?hdnea=', token])
|
||||||
|
|
||||||
# May have higher quality video
|
# May have higher quality video
|
||||||
sd_url = try_get(
|
sd_url = try_get(
|
||||||
stream, lambda x: x['streams']['hds']['sd'], compat_str)
|
stream, lambda x: x['streams']['hls']['sd'], compat_str)
|
||||||
if sd_url:
|
if sd_url:
|
||||||
format_urls.append(sd_url.replace('metered', 'um'))
|
format_urls.append(tokenize_url(sd_url, token))
|
||||||
|
else:
|
||||||
|
sd_low_url = try_get(
|
||||||
|
stream, lambda x: x['streams']['hls']['sd-low'], compat_str)
|
||||||
|
format_urls.append(tokenize_url(sd_low_url, token))
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
for format_url in format_urls:
|
for format_url in format_urls:
|
||||||
if format_url:
|
if format_url:
|
||||||
formats.extend(
|
formats.extend(
|
||||||
self._extract_akamai_formats(format_url, video_id))
|
self._extract_m3u8_formats(format_url, video_id, 'mp4'))
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
||||||
subtitles = {}
|
subtitles = {}
|
||||||
|
|
Loading…
Reference in a new issue