yt-dlp 2025.11.16.232923.dev0__py3-none-any.whl → 2025.11.18.232918.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,17 @@
1
- import json
1
+ import urllib.parse
2
2
 
3
3
  from .brightcove import BrightcoveNewIE
4
4
  from .common import InfoExtractor
5
5
  from .zype import ZypeIE
6
6
  from ..networking import HEADRequest
7
- from ..networking.exceptions import HTTPError
8
7
  from ..utils import (
9
8
  ExtractorError,
10
9
  filter_dict,
11
10
  parse_qs,
12
11
  smuggle_url,
13
- try_call,
14
12
  urlencode_postdata,
15
13
  )
14
+ from ..utils.traversal import traverse_obj
16
15
 
17
16
 
18
17
  class ThisOldHouseIE(InfoExtractor):
@@ -77,46 +76,43 @@ class ThisOldHouseIE(InfoExtractor):
77
76
  'only_matching': True,
78
77
  }]
79
78
 
80
- _LOGIN_URL = 'https://login.thisoldhouse.com/usernamepassword/login'
81
-
82
79
  def _perform_login(self, username, password):
83
- self._request_webpage(
84
- HEADRequest('https://www.thisoldhouse.com/insider'), None, 'Requesting session cookies')
85
- urlh = self._request_webpage(
86
- 'https://www.thisoldhouse.com/wp-login.php', None, 'Requesting login info',
87
- errnote='Unable to login', query={'redirect_to': 'https://www.thisoldhouse.com/insider'})
80
+ login_page = self._download_webpage(
81
+ 'https://www.thisoldhouse.com/insider-login', None, 'Downloading login page')
82
+ hidden_inputs = self._hidden_inputs(login_page)
83
+ response = self._download_json(
84
+ 'https://www.thisoldhouse.com/wp-admin/admin-ajax.php', None, 'Logging in',
85
+ headers={
86
+ 'Accept': 'application/json',
87
+ 'X-Requested-With': 'XMLHttpRequest',
88
+ }, data=urlencode_postdata(filter_dict({
89
+ 'action': 'onebill_subscriber_login',
90
+ 'email': username,
91
+ 'password': password,
92
+ 'pricingPlanTerm': hidden_inputs['pricing_plan_term'],
93
+ 'utm_parameters': hidden_inputs.get('utm_parameters'),
94
+ 'nonce': hidden_inputs['mdcr_onebill_login_nonce'],
95
+ })))
88
96
 
89
- try:
90
- auth_form = self._download_webpage(
91
- self._LOGIN_URL, None, 'Submitting credentials', headers={
92
- 'Content-Type': 'application/json',
93
- 'Referer': urlh.url,
94
- }, data=json.dumps(filter_dict({
95
- **{('client_id' if k == 'client' else k): v[0] for k, v in parse_qs(urlh.url).items()},
96
- 'tenant': 'thisoldhouse',
97
- 'username': username,
98
- 'password': password,
99
- 'popup_options': {},
100
- 'sso': True,
101
- '_csrf': try_call(lambda: self._get_cookies(self._LOGIN_URL)['_csrf'].value),
102
- '_intstate': 'deprecated',
103
- }), separators=(',', ':')).encode())
104
- except ExtractorError as e:
105
- if isinstance(e.cause, HTTPError) and e.cause.status == 401:
97
+ message = traverse_obj(response, ('data', 'message', {str}))
98
+ if not response['success']:
99
+ if message and 'Something went wrong' in message:
106
100
  raise ExtractorError('Invalid username or password', expected=True)
107
- raise
108
-
109
- self._request_webpage(
110
- 'https://login.thisoldhouse.com/login/callback', None, 'Completing login',
111
- data=urlencode_postdata(self._hidden_inputs(auth_form)))
101
+ raise ExtractorError(message or 'Login was unsuccessful')
102
+ if message and 'Your subscription is not active' in message:
103
+ self.report_warning(
104
+ f'{self.IE_NAME} said your subscription is not active. '
105
+ f'If your subscription is active, this could be caused by too many sign-ins, '
106
+ f'and you should instead try using {self._login_hint(method="cookies")[4:]}')
107
+ else:
108
+ self.write_debug(f'{self.IE_NAME} said: {message}')
112
109
 
113
110
  def _real_extract(self, url):
114
111
  display_id = self._match_id(url)
115
- webpage = self._download_webpage(url, display_id)
116
- if 'To Unlock This content' in webpage:
117
- self.raise_login_required(
118
- 'This video is only available for subscribers. '
119
- 'Note that --cookies-from-browser may not work due to this site using session cookies')
112
+ webpage, urlh = self._download_webpage_handle(url, display_id)
113
+ # If login response says inactive subscription, site redirects to frontpage for Insider content
114
+ if 'To Unlock This content' in webpage or urllib.parse.urlparse(urlh.url).path in ('', '/'):
115
+ self.raise_login_required('This video is only available for subscribers')
120
116
 
121
117
  video_url, video_id = self._search_regex(
122
118
  r'<iframe[^>]+src=[\'"]((?:https?:)?//(?:www\.)?thisoldhouse\.(?:chorus\.build|com)/videos/zype/([0-9a-f]{24})[^\'"]*)[\'"]',
yt_dlp/version.py CHANGED
@@ -1,8 +1,8 @@
1
1
  # Autogenerated by devscripts/update-version.py
2
2
 
3
- __version__ = '2025.11.16.232923'
3
+ __version__ = '2025.11.18.232918'
4
4
 
5
- RELEASE_GIT_HEAD = '854fded114f3b7b33693c2d3418575d04014aa4b'
5
+ RELEASE_GIT_HEAD = '9daba4f442139ee2537746398afc5ac30b51c28c'
6
6
 
7
7
  VARIANT = 'pip'
8
8
 
@@ -12,4 +12,4 @@ CHANNEL = 'nightly'
12
12
 
13
13
  ORIGIN = 'yt-dlp/yt-dlp-nightly-builds'
14
14
 
15
- _pkg_version = '2025.11.16.232923dev'
15
+ _pkg_version = '2025.11.18.232918dev'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yt-dlp
3
- Version: 2025.11.16.232923.dev0
3
+ Version: 2025.11.18.232918.dev0
4
4
  Summary: A feature-rich command-line audio/video downloader
5
5
  Project-URL: Documentation, https://github.com/yt-dlp/yt-dlp#readme
6
6
  Project-URL: Repository, https://github.com/yt-dlp/yt-dlp
@@ -11,7 +11,7 @@ yt_dlp/options.py,sha256=Icc0JRiKOzITWoMujE_ihEmkCS-uCcie42XhIh8LvS4,100388
11
11
  yt_dlp/plugins.py,sha256=EGmR0ydaahNspGrgszTNX4-YjHe93WOOhcw1gf6PZSs,8215
12
12
  yt_dlp/socks.py,sha256=oAuAfWM6jxI8A5hHDLEKq2U2-k9NyMB_z6nrKzNE9fg,8936
13
13
  yt_dlp/update.py,sha256=sY7gNFBQorzs7sEjRrqL5QOsTBNmGGa_FnpTtbxY1vA,25280
14
- yt_dlp/version.py,sha256=CQn4lqXci3AoCMS3s1SRJ_lFc_Cinp_LojsTxJ5SsXo,360
14
+ yt_dlp/version.py,sha256=9zKKbcKfkkFu5Ey3XWP2vxqwd3C_QP2zv6qMENNJ1dk,360
15
15
  yt_dlp/webvtt.py,sha256=ONkXaaNCZcX8pQhJn3iwIKyaQ34BtVDrMEdG6wRNZwM,11451
16
16
  yt_dlp/__pyinstaller/__init__.py,sha256=-c4Zo8nQGKAm8wc_LDscxMtK7zr_YhZwRnC9CMruUBE,72
17
17
  yt_dlp/__pyinstaller/hook-yt_dlp.py,sha256=5Rd0zV2pDskjY1KtT0wsjxv4hStx67sLCjUexsFvFus,1339
@@ -882,7 +882,7 @@ yt_dlp/extractor/thestar.py,sha256=LsMx9W2P3Qsf8NxA9Nth4MCh4RMMsacgafJm67OeD9Q,1
882
882
  yt_dlp/extractor/thesun.py,sha256=RrZwJO75EGhqMZLTAlxDfSO6lRs3Oql_ukVkpFZROBI,1656
883
883
  yt_dlp/extractor/theweatherchannel.py,sha256=MVQOtlNcPX8YB0X8lF-rNJHIMCYQ7DjSuuStfaA7aq8,4110
884
884
  yt_dlp/extractor/thisamericanlife.py,sha256=_2ijnZ3aXYYXosa_GcCysx5qE0lonHJYZVwpD93dmQU,1505
885
- yt_dlp/extractor/thisoldhouse.py,sha256=PyTZhejqFI2qpQQAJrQTIbocpOQ7XC2rau_7fd-_80s,5955
885
+ yt_dlp/extractor/thisoldhouse.py,sha256=YLnhWuuA0xMbY766tVDVKi-iaRwwmgOs8sdD-ydBFMs,5980
886
886
  yt_dlp/extractor/thisvid.py,sha256=dxN-I56UieWt92iS2VSXK7IckobVNQ6BYPgvOJ9vWJI,8628
887
887
  yt_dlp/extractor/threeqsdn.py,sha256=zNHqF2ELqulYpoUCp1YYPlf0tyPS2krsrEUkS0Cw8YQ,6219
888
888
  yt_dlp/extractor/threespeak.py,sha256=agG3Ue0h19dAknJHwrK9a3RBQB4aja-5cx1crkOCIUc,4025
@@ -1120,13 +1120,13 @@ yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
1120
1120
  yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
1121
1121
  yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
1122
1122
  yt_dlp/utils/jslib/devalue.py,sha256=7DCGK_zUN0ZeV5hwPT06zaRMUxX_hyUyFWqs79rxw24,5621
1123
- yt_dlp-2025.11.16.232923.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1124
- yt_dlp-2025.11.16.232923.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=1p-zv2tZPh1gscLG3ceL7GGCzC4TQU8mS9wiqPS-oXE,164662
1125
- yt_dlp-2025.11.16.232923.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=hLa6lZnm7keENpNCjml9A88hbvefdsdoOpAiaNCVyHo,51488
1126
- yt_dlp-2025.11.16.232923.dev0.data/data/share/man/man1/yt-dlp.1,sha256=C33_xKvu5DD5SScnivPeV2EJEYSeJ1tPXYZnlJBDayc,159125
1127
- yt_dlp-2025.11.16.232923.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1128
- yt_dlp-2025.11.16.232923.dev0.dist-info/METADATA,sha256=kBd5RheZHZgvVwnxnnwcxtzPdODtspdeM8eCJ2YzXEQ,180054
1129
- yt_dlp-2025.11.16.232923.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1130
- yt_dlp-2025.11.16.232923.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1131
- yt_dlp-2025.11.16.232923.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1132
- yt_dlp-2025.11.16.232923.dev0.dist-info/RECORD,,
1123
+ yt_dlp-2025.11.18.232918.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1124
+ yt_dlp-2025.11.18.232918.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=1p-zv2tZPh1gscLG3ceL7GGCzC4TQU8mS9wiqPS-oXE,164662
1125
+ yt_dlp-2025.11.18.232918.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=hLa6lZnm7keENpNCjml9A88hbvefdsdoOpAiaNCVyHo,51488
1126
+ yt_dlp-2025.11.18.232918.dev0.data/data/share/man/man1/yt-dlp.1,sha256=C33_xKvu5DD5SScnivPeV2EJEYSeJ1tPXYZnlJBDayc,159125
1127
+ yt_dlp-2025.11.18.232918.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1128
+ yt_dlp-2025.11.18.232918.dev0.dist-info/METADATA,sha256=k5AcRj2FZrpYxAxpcJ3NA3B9A60XYUuD08TXDRPqX24,180054
1129
+ yt_dlp-2025.11.18.232918.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1130
+ yt_dlp-2025.11.18.232918.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1131
+ yt_dlp-2025.11.18.232918.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1132
+ yt_dlp-2025.11.18.232918.dev0.dist-info/RECORD,,