[abc:iview] Fix extraction (closes #14711)

ABC dropped unmetering, so change to metered hls urls which
require auth.
This commit is contained in:
d2au 2017-11-18 05:28:58 +10:30 committed by Sergey M․
parent 538d4f8681
commit 2e65e7db9e
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D

View File

@ -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 @@ class ABCIViewIE(InfoExtractor):
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 = {}