dirkf
5585d76da6
[compat] Add compat_dict
...
A dict that preserves insertion order and otherwise resembles the
dict builtin (if it isn't it) rather than `collections.OrderedDict`.
Also:
* compat_builtins_dict: the built-in definition in case `compat_dict`
was imported as `dict`
* compat_dict_items: use instead of `dict.items` to get items from
a `compat_dict` in insertion order, if you didn't define `dict` as
`compat_dict`.
2025-11-21 01:52:11 +00:00
dirkf
931e15621c
[compat] Add compat_abc_ABC
...
Base class for abstract classes
2025-11-21 01:52:11 +00:00
dirkf
27867cc814
[compat] Add compat_thread
2025-11-21 01:52:11 +00:00
dirkf
70b40dd1ef
[utils] Add subs_list_to_dict() traversal helper
...
Thx: yt-dlp/yt-dlp#10653 , etc
2025-11-21 01:52:11 +00:00
dirkf
a9b4649d92
[utils] Apply partial_application decorator to existing functions
...
Thx: yt-dlp/yt-dlp#10653 (etc)
2025-11-21 01:52:11 +00:00
dirkf
23a848c314
[utils] Add partial_application decorator function
...
Thx: yt-dlp/yt-dlp#10653
2025-11-21 01:52:11 +00:00
dirkf
a96a778750
[core] Fix housekeeping for available_at
2025-11-21 01:52:11 +00:00
dirkf
68fe8c1781
[utils] Support traversal helper functions require, value, unpack
...
Thx: yt-dlp/yt-dlp#10653
2025-11-21 01:52:11 +00:00
dirkf
96419fa706
[utils] Support filter traversal key
...
Thx yt-dlp/yt-dlp#10653
2025-11-21 01:52:11 +00:00
dirkf
cca41c9d2c
[test] Move dict_get() traversal test to its own class
...
Matches yt-dlp/yt-dlp#9426
2025-11-21 01:52:11 +00:00
dirkf
bc39e5e678
[test] Fix test_traversal_morsel for Py 3.14+
...
Thx: yt-dlp/yt-dlp#13471
2025-11-21 01:52:11 +00:00
dirkf
014ae63a11
[test] Support additional args and kwargs in report_warning() mocks
2025-11-21 01:52:11 +00:00
dirkf
1e109aaee1
[workflows/ci] Avoid installing wheel and setuptools with pip
...
Works around dependent wheel installation failure with Py 3.4 from 2025-10
2025-10-18 11:02:28 +01:00
dirkf
efb4011211
[YouTube] Introduce _extract_and_report_alerts() per yt-dlp
...
Fixes #33196 .
Also removing previous `_extract_alerts()` method.
2025-10-18 11:02:28 +01:00
dirkf
c1f5c3274a
[YouTube] Improve some traversals
...
Pending full alignment with yt-dlp ...
2025-10-18 11:02:28 +01:00
dirkf
e21ff28f6f
[YouTube] Misc clean-ups from linter, etc
2025-10-18 11:02:28 +01:00
dirkf
82552faba6
[workflows/ci] Update to windows-2022 runner
...
FFS
2025-09-29 02:15:05 +01:00
dirkf
617d4e6466
[core] Support explicit --no-list-formats option
2025-09-29 02:15:05 +01:00
dirkf
9223fcc48a
[YouTube] Support LOCKUP_CONTENT_TYPE_VIDEO in subscriptions feed extraction
...
From yt-dlp/yt-dlp#13665 ), thx bashonly
2025-09-29 02:15:05 +01:00
dirkf
4222c6d78b
[YouTube] Extract fallback title and description from initial data
...
Based on yt-dlp/yt-dlp#14078 , thx bashonly
2025-09-29 02:15:05 +01:00
dirkf
2735d1bf1d
[YouTube] Extract srt subtitles
...
From yt-dlp/yt-dlp#13411 , thx gamer191
2025-09-29 02:15:05 +01:00
dirkf
f2a774cb9d
[YouTube] Fix subtitles extraction
...
From yt-dlp/yt-dlp#13659 , thx bashonly
2025-09-29 02:15:05 +01:00
dirkf
92680b127f
[YouTube] Handle required preroll waiting period
...
* Based on yt-dlp/yt-dlp#14081 , thx bashonly
* Uses internal `youtube_preroll_sleep` param, default 6s
2025-09-29 02:15:05 +01:00
dirkf
40ab920354
[downloader] Delay download according to available_at format key
2025-09-29 02:15:05 +01:00
dirkf
0739f58f90
[YouTube] Implement player JS override for player 0004de42
...
* based on yt-dlp/yt-dlp#14398, thx seproDev
* adds --youtube-player-js-variant option
* adds --youtube-player-js-version option
* sets defaults to main variant of player `0004de42`
* fixes #33187 , for now
2025-09-29 02:15:05 +01:00
dirkf
aac0148b89
[YouTube] Force WEB user agent for video page download
...
Fixes #33142 , until default UAs work.
2025-09-29 02:15:05 +01:00
dirkf
7f7b3881aa
[YouTube] Handle Web Safari formats
...
From yt-dlp/yt-dlp#14168 , thx bashonly.
2025-09-29 02:15:05 +01:00
dirkf
0c41b03114
[YouTube] Update player client details
2025-09-29 02:15:05 +01:00
dirkf
7c6630bfdd
[YouTube] Miscellaneous clean-ups
2025-09-29 02:15:05 +01:00
dirkf
a084c80f7b
[YouTube] Fix 680069a, excess min_ver
...
Resolves #33125 .
2025-05-04 12:51:54 +01:00
dirkf
e102b9993a
[workflows/ci.yml] Move pinned Ubuntu runner images from withdrawn 20.4 to 22.04
...
* fix consequent missing `python-is-python2` package
2025-05-03 18:33:39 +01:00
dirkf
680069a149
[YouTube] Improve n-sig function extraction for player aa3fc80b
...
Resolves #33123
2025-05-03 00:09:21 +01:00
dirkf
4a31290ae1
[YouTube] Delete cached problem nsig cache data on descrambling error
...
* inspired by yt-dlp/yt-dlp#12750
2025-05-03 00:09:21 +01:00
dirkf
3a42f6ad37
[YouTube] Cache signature timestamp from player JS
...
* if the YT webpage can't be loaded, getting the `sts` requires loading the
player JS: this caches it
* based on yt-dlp/yt-dlp#13047 , thx bashonly
2025-05-03 00:09:21 +01:00
dirkf
ec75141bf0
[Cache] Add clear function
2025-05-03 00:09:20 +01:00
dirkf
c052a16f72
[JSInterp] Add tests and relevant functionality from yt-dlp
...
* thx seproDev, bashonly: yt-dlp/yt-dlp#12760, yt-dlp/yt-dlp#12761:
- Improve nested attribute support
- Pass global stack when extracting objects
- interpret_statement: Match attribute before indexing
- Fix assignment to array elements with nested brackets
- Add new signature tests
- Invalidate JS function cache
- Avoid testdata dupes now that we cache by URL
* rework nsig function name search
* fully fixes #33102
* update cache required versions
* update program version
2025-04-08 01:59:00 +01:00
dirkf
bd2ded59f2
[JSInterp] Improve unary operators; add !
2025-04-08 01:59:00 +01:00
dirkf
16b7e97afa
[JSInterp] Add _separate_at_op()
2025-04-08 01:59:00 +01:00
dirkf
d21717978c
[JSInterp] Improve JS classes, etc
2025-04-08 01:59:00 +01:00
dirkf
7513413794
[JSInterp] Reorganise some declarations to align better with yt-dlp
2025-04-08 01:59:00 +01:00
dirkf
67dbfa65f2
[InfoExtractor] Fix merging subtitles to empty target
2025-04-08 01:59:00 +01:00
dirkf
6eb6d6dff5
[InfoExtractor] Use local variants for remaining parent method calls
...
* ... where defined
2025-04-08 01:59:00 +01:00
dirkf
6c40d9f847
[YouTube] Remove remaining hard-coded API keys
...
* no longer required for these cases
2025-04-08 01:59:00 +01:00
dirkf
1b08d3281d
[YouTube] Fix playlist continuation extraction
...
* thx coletdjnz, bashonly: yt-dlp/yt-dlp#12777
2025-04-08 01:59:00 +01:00
dirkf
32b8d31780
[YouTube] Support shorts playlist
...
* only 1..100: yt-dlp/yt-dlp#11130
2025-04-08 01:59:00 +01:00
dirkf
570b868078
[cache] Use esc_rfc3986 to encode cache key
2025-04-08 01:59:00 +01:00
dirkf
2190e89260
[utils] Support optional safe argument for escape_rfc3986()
2025-04-08 01:59:00 +01:00
dirkf
7e136639db
[compat] Improve Py2 compatibility for URL Quoting
2025-04-08 01:59:00 +01:00
dirkf
cedeeed56f
[cache] Align further with yt-dlp
...
* use compat_os_makedirs
* support non-ASCII characters in cache key
* improve logging
2025-04-08 01:59:00 +01:00
dirkf
add4622870
[compat] Add compat_os_makedirs
...
* support exists_ok parameter in Py < 3.2
2025-04-08 01:59:00 +01:00
dirkf
9a6ddece4d
[core] Refactor message routines to align better with yt-dlp
...
* in particular, support `only_once` in the same methods
2025-04-08 01:59:00 +01:00
dirkf and GitHub
3eb8d22ddb
[JSInterp] Temporary fix for #33102
2025-03-31 04:21:09 +01:00
dirkf
4e714f9df1
[Misc] Correct [_]IE_DESC/NAME in a few IEs
...
* thx seproDev, yt-dlp/yt-dlp/pull/12694/commits/ae69e3c
* also add documenting comment in `InfoExtractor`
2025-03-26 12:47:19 +00:00
dirkf
c1ea7f5a24
[ITV] Mark ITVX not working
...
* update old shim
* correct [_]IE_DESC
2025-03-26 12:17:49 +00:00
dirkf
2b4fbfce25
[YouTube] Support player 4fcd6e4a
...
thx seproDev, bashonly: yt-dlp/yt-dlp#12748
2025-03-26 02:27:25 +00:00
dirkf
1bc45b8b6c
[JSInterp] Use , for join() with null/undefined argument
...
Eg: [1,2,3].join(null) -> '1,2,3'
2025-03-25 22:35:06 +00:00
dirkf
b982d77d0b
[YouTube] Align signature tests with yt-dlp
...
thx bashonly, yt-dlp/yt-dlp#12725
2025-03-25 22:35:06 +00:00
dirkf
c55dbf4838
[YouTube] Update signature extraction for players 643afba4, 363db69b
2025-03-25 22:35:06 +00:00
dirkf
087d865230
[YouTube] Support new player URL patterns
2025-03-25 22:35:06 +00:00
dirkf
a4fc1151f1
[JSInterp] Improve indexing
...
* catch invalid list index with `ValueError` (eg [1, 2]['ab'] -> undefined)
* allow assignment outside existing list (eg var l = [1,2]; l[9] = 0;)
2025-03-25 22:35:05 +00:00
dirkf
a464c159e6
[YouTube] Make _extract_player_info() use _search_regex()
2025-03-25 22:35:05 +00:00
dirkf
7dca08eff0
[YouTube] Also get original of translated automatic captions
2025-03-25 22:35:05 +00:00
dirkf
2239ee7965
[YouTube] Get subtitles/automatic captions from both web and API responses
2025-03-25 22:35:05 +00:00
dirkf and sepro
da7223d4aa
[YouTube] Improve support for tce-style player JS
...
* improve extraction of global "useful data" Array from player JS
* also handle tv-player and add tests: thx seproDev (yt-dlp/yt-dlp#12684 )
Co-Authored-By: sepro <sepro@sepr0.com >
2025-03-21 16:26:25 +00:00
dirkf and sepro
37c2440d6a
[YouTube] Update player client data
...
thx seproDev (yt-dlp/yt-dlp#12603 )
Co-authored-by: sepro <sepro@sepr0.com >
2025-03-21 16:13:24 +00:00
dirkf
420d53387c
[JSInterp] Improve tests
...
* from yt-dlp/yt-dlp#12313
* also fix d7c2708
2025-03-11 02:00:24 +00:00
dirkf
32f89de92b
[YouTube] Update TVHTML5 client parameters
...
* resolves #33078
2025-03-11 02:00:24 +00:00
dirkf
283dca56fe
[YouTube] Initially support tce-style player JS
...
* resolves #33079
2025-03-11 02:00:24 +00:00
dirkf
422b1b31cf
[YouTube] Temporarily redirect from tce-style player JS
2025-03-11 02:00:24 +00:00
dirkf
1dc27e1c3b
[JSInterp] Make indexing error handling more conformant
...
* by default TypeError -> undefined, else raise
* set allow_undefined=True/False to override
2025-03-11 02:00:24 +00:00
dirkf
af049e309b
[JSInterp] Handle undefined, etc, passed to JS_RegExp and Exception
2025-03-11 02:00:24 +00:00
dirkf
94849bc997
[JSInterp] Improve Date processing
...
* add JS_Date class implementing JS Date
* support constructor args other than date string
* support static methods of Date
* Date objects are still automatically coerced to timestamp before using in JS.
2025-03-11 02:00:24 +00:00
dirkf
974c7d7f34
[compat] Fix inheriting from compat_collections_chain_map
...
* see ytdl-org/youtube-dl#33079#issuecomment-2704038049
2025-03-11 02:00:24 +00:00
dirkf
8738407d77
[compat] Support zstd Content-Encoding
...
* see RFC 8878 7.2
2025-03-11 02:00:24 +00:00
dirkf
cecaa18b80
[compat] Clean-up
...
* make workaround_optparse_bug9161 private
* add comments
* avoid leaving test objects behind
2025-03-11 02:00:24 +00:00
dirkf and GitHub
673277e510
[YouTube] Fix 91b1569
2025-02-28 01:02:20 +00:00
91b1569f68
[YouTube] Fix channel playlist extraction ( #33074 )
...
* [YouTube] Extract playlist items from LOCKUP_VIEW_MODEL_...
* resolves #33073
* thx seproDev (yt-dlp/yt-dlp#11615 )
Co-authored-by: sepro <sepro@sepr0.com >
2025-02-28 00:02:10 +00:00
dirkf
711e72c292
[JSInterp] Fix bit-shift coercion for player 9c6dfc4a
2025-02-07 00:01:50 +00:00
dirkf
26b6f15d14
[compat] Make casefold private
...
* if required, not supported:
`from youtube_dl.casefold import _casefold as casefold`
2025-02-07 00:01:50 +00:00
dirkf
5975d7bb96
[YouTube] Use X-Goog-Visitor-Id
...
* required with tv player client
* resolves #33030
2025-01-22 06:52:40 +00:00
dirkf
63fb0fc415
[YouTube] Retain .videoDetails members from all player responses
2025-01-20 13:23:54 +00:00
dirkf
b09442a2f4
[YouTube] Also use ios client when is_live
2025-01-19 01:18:34 +00:00
dirkf
55ad8a24ca
[YouTube] Support ... /feeds/videos.xml?playlist_id={pl_id}
2025-01-15 03:22:56 +00:00
dirkf
21fff05121
[YouTube] Switch to TV API client
...
* thx yt-dlp/yt-dlp#12059
2025-01-15 03:19:15 +00:00
dirkf
1036478d13
[YouTube] Endure subtitle URLs are complete
...
* WEB URLs are, MWEB not
* resolves #33017
2025-01-06 01:39:04 +00:00
dirkf
00ad2b8ca1
[YouTube] Refactor subtitle processing
...
* move to internal function
* use `traverse-obj()`
2025-01-06 01:24:30 +00:00
dirkf
ab7c61ca29
[YouTube] Apply code style changes, trailing commas, etc
2025-01-06 01:22:16 +00:00
dirkf
176fc2cb00
[YouTube] Avoid early crash if webpage can't be read
...
* see issue #33013
2024-12-31 14:51:29 +00:00
dirkf
d55d1f423d
[YouTube] Always extract using MWEB API client
...
* temporary fix-up for 403 on download
* MWEB parameters from yt-dlp 2024-12-06
2024-12-16 12:38:51 +00:00
dirkf and bashonly
eeafbbc3e5
[YouTube] Fix signature function extraction for 2f1832d2
...
* `_` was omitted from patterns
* thx yt-dlp/yt-dlp#11801
Co-authored-by: bashonly
2024-12-16 12:38:51 +00:00
dirkf
cd7c7b5edb
[YouTube] Simplify pattern for nsig function name extraction
2024-12-16 12:38:51 +00:00
dirkf
eed784e15f
[YouTube] Pass nsig value as return hook, fixes player 3bb1f723
2024-12-16 12:38:51 +00:00
dirkf and bashonly
b4469a0f65
[YouTube] Handle player 3bb1f723
...
* fix signature code extraction
* raise if n function returns input value
* add new tests from yt-dlp
Co-authored-by: bashonly
2024-12-16 12:38:51 +00:00
dirkf
ce1e556b8f
[jsinterp] Add return hook for player 3bb1f723
...
* set var `_ytdl_do_not_return` to a specific value in the scope of a function
* if an expression to be returned has that value, `return` becomes `void`
2024-12-16 12:38:51 +00:00
dirkf
f487b4a02a
[jsinterp] Strip /* comments */ when parsing
...
* NB: _separate() is looking creaky
2024-12-16 12:38:51 +00:00
dirkf
60835ca16c
[jsinterp] Fix and improve "methods"
...
* push, unshift return new length
* impove edge cases for push/pop, shift/unshift, forEach, indexOf, charCodeAt
* increase test coverage
2024-12-16 12:38:51 +00:00
dirkf
94fd774608
[jsinterp] Fix and improve split/join
...
* improve split/join edge cases
* correctly implement regex split (not like re.split)
2024-12-16 12:38:51 +00:00
dirkf
5dee6213ed
[jsinterp] Fix and improve arithmetic operations
...
* addition becomes concat with a string operand
* improve handling of edgier cases
* arithmetic in float like JS (more places need cast to int?)
* increase test coverage
2024-12-16 12:38:51 +00:00
dirkf
81e64cacf2
[jsinterp] Support multiple indexing (eg a[1][2])
...
* extend single indexing with improved RE (should probably use/have used _separate_at_paren())
* fix some cases that should have given undefined, not throwing
* standardise RE group names
* support length of objects, like {1: 2, 3: 4, length: 42}
2024-12-16 12:38:51 +00:00
dirkf
c1a03b1ac3
[jsinterp] Fix and improve loose and strict equality operations
...
* reimplement loose equality according to MDN (eg, 1 == "1")
* improve strict equality (eg, "abc" === "abc" but 'abc' is not 'abc')
* add tests for above
2024-12-16 12:38:51 +00:00