diff options
| author | bashonly <88596187+bashonly@users.noreply.github.com> | 2023-03-23 11:28:23 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-23 16:28:23 +0000 | 
| commit | 5cc0a8fd2e9fec50026fb92170b57993af939e4a (patch) | |
| tree | 504a0ad72ccb7668cb2818dad1a1b27459f8f5d7 | |
| parent | 6994afc030d2a786d8032075ed71a14d7eac5a4f (diff) | |
| download | hypervideo-pre-5cc0a8fd2e9fec50026fb92170b57993af939e4a.tar.lz hypervideo-pre-5cc0a8fd2e9fec50026fb92170b57993af939e4a.tar.xz hypervideo-pre-5cc0a8fd2e9fec50026fb92170b57993af939e4a.zip | |
[extractor/generic] Accept values for `fragment_query`, `variant_query` (#6600)
Closes #6593
Authored by: bashonly
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | yt_dlp/extractor/generic.py | 20 | 
2 files changed, 14 insertions, 10 deletions
| @@ -1797,8 +1797,8 @@ The following extractors use this feature:  * `approximate_date`: Extract approximate `upload_date` and `timestamp` in flat-playlist. This may cause date-based filters to be slightly off  #### generic -* `fragment_query`: Passthrough any query in mpd/m3u8 manifest URLs to their fragments. Does not apply to ffmpeg -* `variant_query`: Passthrough the master m3u8 URL query to its variant playlist URLs +* `fragment_query`: Passthrough any query in mpd/m3u8 manifest URLs to their fragments if no value is provided, or else apply the query string given as `fragment_query=VALUE`. Does not apply to ffmpeg +* `variant_query`: Passthrough the master m3u8 URL query to its variant playlist URLs if no value is provided, or else apply the query string given as `variant_query=VALUE`  * `hls_key`: An HLS AES-128 key URI *or* key (as hex), and optionally the IV (as hex), in the form of `(URI|KEY)[,IV]`; e.g. `generic:hls_key=ABCDEF1234567980,0xFEDCBA0987654321`. Passing any of these values will force usage of the native HLS downloader and override the corresponding values found in the m3u8 playlist  #### funimation diff --git a/yt_dlp/extractor/generic.py b/yt_dlp/extractor/generic.py index 075bb36de..f9fa01feb 100644 --- a/yt_dlp/extractor/generic.py +++ b/yt_dlp/extractor/generic.py @@ -24,7 +24,6 @@ from ..utils import (      mimetype2ext,      orderedSet,      parse_duration, -    parse_qs,      parse_resolution,      smuggle_url,      str_or_none, @@ -2187,18 +2186,23 @@ class GenericIE(InfoExtractor):          self._downloader.write_debug(f'Identified {num} {name}{format_field(note, None, "; %s")}')      def _extra_manifest_info(self, info, manifest_url): -        if self._configuration_arg('fragment_query'): -            query_string = urllib.parse.urlparse(manifest_url).query -            if query_string: -                info['extra_param_to_segment_url'] = query_string +        fragment_query = self._configuration_arg('fragment_query', [None], casesense=True)[0] +        if fragment_query is not None: +            fragment_query = self._configuration_arg('fragment_query', casesense=True)[0] +            info['extra_param_to_segment_url'] = ( +                urllib.parse.urlparse(fragment_query).query or fragment_query +                or urllib.parse.urlparse(manifest_url).query or None)          hex_or_none = lambda x: x if re.fullmatch(r'(0x)?[\da-f]+', x, re.IGNORECASE) else None -        info['hls_aes'] = traverse_obj(self._configuration_arg('hls_key'), { +        info['hls_aes'] = traverse_obj(self._configuration_arg('hls_key', casesense=True), {              'uri': (0, {url_or_none}), 'key': (0, {hex_or_none}), 'iv': (1, {hex_or_none}),          }) or None -        if self._configuration_arg('variant_query'): -            query = parse_qs(manifest_url) +        variant_query = self._configuration_arg('variant_query', [None], casesense=True)[0] +        if variant_query is not None: +            query = urllib.parse.parse_qs( +                urllib.parse.urlparse(variant_query).query or variant_query +                or urllib.parse.urlparse(manifest_url).query)              for fmt in self._downloader._get_formats(info):                  fmt['url'] = update_url_query(fmt['url'], query) | 
