[extractor/radiko] Fix format sorting for Time Free (#6159)

Authored by: road-master
This commit is contained in:
Master 2023-02-11 19:24:10 +09:00 committed by GitHub
parent 6839ae1f6d
commit 203a06f855
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,5 +1,4 @@
import base64 import base64
import re
import urllib.parse import urllib.parse
from .common import InfoExtractor from .common import InfoExtractor
@ -15,6 +14,23 @@
class RadikoBaseIE(InfoExtractor): class RadikoBaseIE(InfoExtractor):
_FULL_KEY = None _FULL_KEY = None
_HOSTS_FOR_TIME_FREE_FFMPEG_UNSUPPORTED = (
'https://c-rpaa.smartstream.ne.jp',
'https://si-c-radiko.smartstream.ne.jp',
'https://tf-f-rpaa-radiko.smartstream.ne.jp',
'https://tf-c-rpaa-radiko.smartstream.ne.jp',
'https://si-f-radiko.smartstream.ne.jp',
'https://rpaa.smartstream.ne.jp',
)
_HOSTS_FOR_TIME_FREE_FFMPEG_SUPPORTED = (
'https://rd-wowza-radiko.radiko-cf.com',
'https://radiko.jp',
'https://f-radiko.smartstream.ne.jp',
)
# Following URL forcibly connects not Time Free but Live
_HOSTS_FOR_LIVE = (
'https://c-radiko.smartstream.ne.jp',
)
def _auth_client(self): def _auth_client(self):
_, auth1_handle = self._download_webpage_handle( _, auth1_handle = self._download_webpage_handle(
@ -92,9 +108,9 @@ def _extract_formats(self, video_id, station, is_onair, ft, cursor, auth_token,
formats = [] formats = []
found = set() found = set()
for url_tag in m3u8_urls: for url_tag in m3u8_urls:
pcu = url_tag.find('playlist_create_url') pcu = url_tag.find('playlist_create_url').text
url_attrib = url_tag.attrib url_attrib = url_tag.attrib
playlist_url = update_url_query(pcu.text, { playlist_url = update_url_query(pcu, {
'station_id': station, 'station_id': station,
**query, **query,
'l': '15', 'l': '15',
@ -117,10 +133,11 @@ def _extract_formats(self, video_id, station, is_onair, ft, cursor, auth_token,
'X-Radiko-AreaId': area_id, 'X-Radiko-AreaId': area_id,
'X-Radiko-AuthToken': auth_token, 'X-Radiko-AuthToken': auth_token,
}) })
not_preferred = is_onair and not pcu.startswith(self._HOSTS_FOR_LIVE) or (not is_onair and (pcu.startswith(self._HOSTS_FOR_TIME_FREE_FFMPEG_UNSUPPORTED) or pcu.startswith(self._HOSTS_FOR_LIVE)))
for sf in subformats: for sf in subformats:
if re.fullmatch(r'[cf]-radiko\.smartstream\.ne\.jp', domain): if not_preferred:
# Prioritize live radio vs playback based on extractor sf['preference'] = -100
sf['preference'] = 100 if is_onair else -100 sf['format_note'] = 'not preferred'
if not is_onair and url_attrib['timefree'] == '1' and time_to_skip: if not is_onair and url_attrib['timefree'] == '1' and time_to_skip:
sf['downloader_options'] = {'ffmpeg_args': ['-ss', time_to_skip]} sf['downloader_options'] = {'ffmpeg_args': ['-ss', time_to_skip]}
formats.extend(subformats) formats.extend(subformats)