yt-dlp 2025.12.29.233040.dev0__py3-none-any.whl → 2025.12.31.233056.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.
- yt_dlp/extractor/_extractors.py +0 -4
- yt_dlp/extractor/facebook.py +0 -64
- yt_dlp/extractor/iqiyi.py +0 -184
- yt_dlp/extractor/lazy_extractors.py +2 -33
- yt_dlp/extractor/nebula.py +9 -1
- yt_dlp/extractor/twitter.py +37 -194
- yt_dlp/extractor/youtube/_video.py +53 -28
- yt_dlp/utils/_utils.py +1 -1
- yt_dlp/version.py +3 -3
- {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/METADATA +1 -1
- {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/RECORD +19 -20
- yt_dlp/extractor/scte.py +0 -137
- {yt_dlp-2025.12.29.233040.dev0.data → yt_dlp-2025.12.31.233056.dev0.data}/data/share/bash-completion/completions/yt-dlp +0 -0
- {yt_dlp-2025.12.29.233040.dev0.data → yt_dlp-2025.12.31.233056.dev0.data}/data/share/doc/yt_dlp/README.txt +0 -0
- {yt_dlp-2025.12.29.233040.dev0.data → yt_dlp-2025.12.31.233056.dev0.data}/data/share/fish/vendor_completions.d/yt-dlp.fish +0 -0
- {yt_dlp-2025.12.29.233040.dev0.data → yt_dlp-2025.12.31.233056.dev0.data}/data/share/man/man1/yt-dlp.1 +0 -0
- {yt_dlp-2025.12.29.233040.dev0.data → yt_dlp-2025.12.31.233056.dev0.data}/data/share/zsh/site-functions/_yt-dlp +0 -0
- {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/WHEEL +0 -0
- {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/entry_points.txt +0 -0
- {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/licenses/LICENSE +0 -0
|
@@ -11,7 +11,7 @@ yt_dlp/options.py,sha256=72Qipr6jhFUO4gUPTIJsqYeHujnZi1L1GYx1Vn5qtiM,100390
|
|
|
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=
|
|
14
|
+
yt_dlp/version.py,sha256=T_SfrGUV3Qyl7cBJcYbl25C1iFvzYV_837bWwtDcALc,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
|
|
@@ -43,7 +43,7 @@ yt_dlp/downloader/rtsp.py,sha256=LenaspFKHde5EkP52oU6jiHYxYferyyGgFPLfm6S5Hs,147
|
|
|
43
43
|
yt_dlp/downloader/websocket.py,sha256=G39SkXEIGtUEYaP1_ODXMiZGZgIrFeb3wqlfVypcHUM,1772
|
|
44
44
|
yt_dlp/downloader/youtube_live_chat.py,sha256=JLpGIUNNbuM7ZuZMY9A6X3xrRDfs3sWz4tzXLXpa1P4,10875
|
|
45
45
|
yt_dlp/extractor/__init__.py,sha256=XMV5BpSWbaDXGkkI2sim_iJk7y0BpCgrDcPjwenA1Y0,1764
|
|
46
|
-
yt_dlp/extractor/_extractors.py,sha256=
|
|
46
|
+
yt_dlp/extractor/_extractors.py,sha256=Ls1NUgTEBWqycCztH01ZUNEqbs5Fiek8DxEZpIdDh-4,54400
|
|
47
47
|
yt_dlp/extractor/abc.py,sha256=rGyouEhGP6gdZlDxkYHHmdnMpaOYoQDXeRMy_JeON1I,18876
|
|
48
48
|
yt_dlp/extractor/abcnews.py,sha256=STJP1ynxEOWURHQSoT-568klK6NIl7MY4KSjjUK_CAg,6326
|
|
49
49
|
yt_dlp/extractor/abcotvs.py,sha256=VYLvqEeBr02xOakqx09A5p4e81Ap1Rp2yfcPpNiTu9g,4555
|
|
@@ -293,7 +293,7 @@ yt_dlp/extractor/euscreen.py,sha256=zLKQ5l94fjJHFlE80-387Ygtp51LUXNbJPMOxX1jQJA,
|
|
|
293
293
|
yt_dlp/extractor/expressen.py,sha256=APCajK9x8BcUKg1Ob-hKUjrQarPW0DgiC4RfR5BKvPs,4086
|
|
294
294
|
yt_dlp/extractor/extractors.py,sha256=T56osbCkdWiEc5fKUdozoFuE7E-txLHBoo8nF4vhxcc,979
|
|
295
295
|
yt_dlp/extractor/eyedotv.py,sha256=hxN_RST8wmkpAq7yE9eLNstFF8F-9yxarhL0Ff4teRY,2617
|
|
296
|
-
yt_dlp/extractor/facebook.py,sha256=
|
|
296
|
+
yt_dlp/extractor/facebook.py,sha256=EwvmMomgrW2rNHGv2a5ySTeA2YWqKD35AiacUVTwWSY,52746
|
|
297
297
|
yt_dlp/extractor/fancode.py,sha256=5g9vL3uSFkJuOGu9jA7RvNMa_JJOdsTY9tJK7MelTLI,7235
|
|
298
298
|
yt_dlp/extractor/fathom.py,sha256=Zen0ODNNDno65GzB4VfDsarmYDb3vrMgXCQeRBSneoI,1836
|
|
299
299
|
yt_dlp/extractor/faulio.py,sha256=L_qcU0nW5PtQTi8grW6chqt_qaOJsClbR-XR2fQniYQ,8606
|
|
@@ -414,7 +414,7 @@ yt_dlp/extractor/instagram.py,sha256=LWx2De1JDwDvC9FL7MT9Dly80sM2A8BTm2iCJrCUAkc
|
|
|
414
414
|
yt_dlp/extractor/internazionale.py,sha256=aBOWQeOIHHtlOFqcuVsc5DeFzzhOdTyuPBvp_PvJTWQ,3106
|
|
415
415
|
yt_dlp/extractor/internetvideoarchive.py,sha256=81YFAHAtmx8opkk7CQ9fqH3-D5-Y-zpo4cdMMmKBtsw,2261
|
|
416
416
|
yt_dlp/extractor/iprima.py,sha256=jwUKaXVudRkqweNCAQ87fC3zZWLMa4wBL8Y2wwaT8kk,10579
|
|
417
|
-
yt_dlp/extractor/iqiyi.py,sha256=
|
|
417
|
+
yt_dlp/extractor/iqiyi.py,sha256=Iu8HNIWviEoUdREewFAPvlC4gHyDiCdYDue3zbHXsT4,24701
|
|
418
418
|
yt_dlp/extractor/islamchannel.py,sha256=k7KDIhDjNfT38_7L5IxvgZ4nmTFx10b2oxLQTaVWKy4,3178
|
|
419
419
|
yt_dlp/extractor/israelnationalnews.py,sha256=uKtuY2xIE_GT6ewwO3W33pgYRk4C02H9dRrQR7qTxmk,2162
|
|
420
420
|
yt_dlp/extractor/itprotv.py,sha256=tf9a06WV0LAyVyMzXsgM5NoB8uwIJhDfQOO4aAAV6LU,5350
|
|
@@ -460,7 +460,7 @@ yt_dlp/extractor/la7.py,sha256=GShDLu1N0rS1bY4uIiUkznThvn7gNiwtSgmh7Rs7t08,9435
|
|
|
460
460
|
yt_dlp/extractor/laracasts.py,sha256=PzTqAbHXiUqog-mpp2qR_rpKa-sZel4mLyzWTPkbDuc,4587
|
|
461
461
|
yt_dlp/extractor/lastfm.py,sha256=OpmE-Y-2rcav2r2xaDQzX_EJiltmbbe6fO9VzkLqNWQ,4748
|
|
462
462
|
yt_dlp/extractor/laxarxames.py,sha256=-YyL-5y4t2L9ptTSLXhvK-SJwvXGqv5l1HfT129zF0c,2773
|
|
463
|
-
yt_dlp/extractor/lazy_extractors.py,sha256=
|
|
463
|
+
yt_dlp/extractor/lazy_extractors.py,sha256=eNOyfLl339nkxHq2CkTN52DMfY3Mbku8ZE9oVlqzp0g,812775
|
|
464
464
|
yt_dlp/extractor/lbry.py,sha256=gC9jRRo8wSXc1-6somhW13brAtmWGlJ5_Q0NMhZpKwk,18078
|
|
465
465
|
yt_dlp/extractor/lci.py,sha256=_0XuoITIt_QFA-6eBNpDXZZfouwUWfcdHQlpAOuiLEs,2131
|
|
466
466
|
yt_dlp/extractor/lcp.py,sha256=edMA8L-eJZLquDvHcSY4oFWI0C8yGgjqW1tmhhLMJ5U,2279
|
|
@@ -568,7 +568,7 @@ yt_dlp/extractor/nba.py,sha256=8PGYkiVMnZoI2nZ3AHv5hI8GgnStNahL86H6M--4eiE,16293
|
|
|
568
568
|
yt_dlp/extractor/nbc.py,sha256=gwNEyy4ufAXrDqHQf2ARjyxnKpnzUDYQngyjbG07P8E,48091
|
|
569
569
|
yt_dlp/extractor/ndr.py,sha256=HSKkrQJdlXKLrBP4QZO_01wLcsEwAbcQpsSVsr1qhYE,18173
|
|
570
570
|
yt_dlp/extractor/ndtv.py,sha256=5ASCATnDJzjKzFEjfreqUxn0Eq5xKqH5fAldX8D4yZE,4513
|
|
571
|
-
yt_dlp/extractor/nebula.py,sha256=
|
|
571
|
+
yt_dlp/extractor/nebula.py,sha256=dTIm1VYBBHQTF9q4vzRlDzpkVaq26ieJmduQV091sfo,23728
|
|
572
572
|
yt_dlp/extractor/nekohacker.py,sha256=XrqJBtLxxrUfc8QfM53aCV_kEEpsds79rEI2CleWX5Y,9549
|
|
573
573
|
yt_dlp/extractor/nerdcubed.py,sha256=dX8_GfnRcoYADJKN-pzQxXRd8CvqyT13Lry9v7rcTbg,1486
|
|
574
574
|
yt_dlp/extractor/nest.py,sha256=xjFemzRYlcac7GEhUOtFreKZHxhJ3r_bqTFxOHZazKY,4647
|
|
@@ -774,7 +774,6 @@ yt_dlp/extractor/screencastomatic.py,sha256=fpY4q2eI3zNmyMsvPPZMdiMhfD3XRpzdJZ80
|
|
|
774
774
|
yt_dlp/extractor/screenrec.py,sha256=7ECYXOKR1kXQ1gOwA52CQASgpQ3rPvOzm-v2DE8M6ts,1171
|
|
775
775
|
yt_dlp/extractor/scrippsnetworks.py,sha256=Xs68XV-PFN78FX9FDD3iwSc7zeLHXjkAlKFjSSbxH2s,5957
|
|
776
776
|
yt_dlp/extractor/scrolller.py,sha256=gpf9gAMH9xUX0Bb3QRtfqxgutHY8Hktb-0jvHbD8nEc,3766
|
|
777
|
-
yt_dlp/extractor/scte.py,sha256=Uyrct9qGupvOqgpjY4P5Xz1GHclk07XFCQY_ujI1ZDY,4860
|
|
778
777
|
yt_dlp/extractor/sejmpl.py,sha256=T2rFF4weCBrpcH11WEGKF1YXj0RZKdqAi-ic0LiPu1o,8609
|
|
779
778
|
yt_dlp/extractor/sen.py,sha256=smVTHvvZ-ivfhRcvVs6ypmHw3V1Evf40JoBpFLm5-7c,1459
|
|
780
779
|
yt_dlp/extractor/senalcolombia.py,sha256=bQuJb2f3POYiYEAPpvlbfOHTflXMyOb9ZC2Hp9Zzovw,1068
|
|
@@ -937,7 +936,7 @@ yt_dlp/extractor/twentymin.py,sha256=c3vIstexHUmthQP6R3Hl0DVyI70LfC4MWIb4_VxYhsY
|
|
|
937
936
|
yt_dlp/extractor/twentythreevideo.py,sha256=bnnGCFO-WVnXTDrpgOKl8jot9nxmelPwR3vnqWyIaUQ,3241
|
|
938
937
|
yt_dlp/extractor/twitcasting.py,sha256=1L0h5kir4_HxCoMD18N-x5wvOJCKuX9Wj6p47uAzPBA,12990
|
|
939
938
|
yt_dlp/extractor/twitch.py,sha256=EJHC5LQvWdf2oBbb-h_WaitRev-YVeGmccfqvWPFXhk,47616
|
|
940
|
-
yt_dlp/extractor/twitter.py,sha256=
|
|
939
|
+
yt_dlp/extractor/twitter.py,sha256=D6XMMIz55mXbPsh2IDDl3HzT8MobJX7ROEk72gouE6w,76608
|
|
941
940
|
yt_dlp/extractor/txxx.py,sha256=lnYZFfSoZuR9A8gmfCUexZrifLU7JoGdZmiTs0o0Luw,17085
|
|
942
941
|
yt_dlp/extractor/udemy.py,sha256=hcSht3C1N_fnXHYFaIMzv843WeyToj7yMiepDK31sqI,19341
|
|
943
942
|
yt_dlp/extractor/udn.py,sha256=DgbID4d4hQrzqUG9l5UhskmERK4RQxu5wcvPgw9mlxU,3879
|
|
@@ -1066,7 +1065,7 @@ yt_dlp/extractor/youtube/_notifications.py,sha256=1nhavzW0e2QWFAWHkfbTU4sSXNp4vU
|
|
|
1066
1065
|
yt_dlp/extractor/youtube/_redirect.py,sha256=WWWnGEkfSGBXpZFi_bWY4XcHZ8PDeK7UsndDaTYYhQg,9005
|
|
1067
1066
|
yt_dlp/extractor/youtube/_search.py,sha256=E9raTPGjUD6mm81WBpT4AsaxyiTBHdNssgzeHwVeNOE,6552
|
|
1068
1067
|
yt_dlp/extractor/youtube/_tab.py,sha256=MiQGWZdHENOz8Ac-OAuAgqMWJ6gC-PZKJWPDG80QY6E,115490
|
|
1069
|
-
yt_dlp/extractor/youtube/_video.py,sha256=
|
|
1068
|
+
yt_dlp/extractor/youtube/_video.py,sha256=afy1fe-DFq6xkFHrZKDUzYPyCM50oboMDwTzWOR7Njs,213632
|
|
1070
1069
|
yt_dlp/extractor/youtube/jsc/__init__.py,sha256=HaVFP8ikrLaE-ClAh39-S28WCF4S2KTRaSu7QvA28E8,289
|
|
1071
1070
|
yt_dlp/extractor/youtube/jsc/_director.py,sha256=92pB-KVSs6plmE5R8gpjkZL9aeoWNR0XTnGOBXMy9go,13167
|
|
1072
1071
|
yt_dlp/extractor/youtube/jsc/_registry.py,sha256=Vg9GkHKHKKPeRfUQ-XSw01mfx_2Xyodh0SJpwjawYCA,102
|
|
@@ -1116,19 +1115,19 @@ yt_dlp/utils/__init__.py,sha256=fktzbumix8bd9Xi288JebTYkxCuNhG21qkcSno-3g_s,283
|
|
|
1116
1115
|
yt_dlp/utils/_deprecated.py,sha256=5KjqmcPW8uIc77xkhvz1gwxBb-jBF7cwG5nI6xxHebU,1300
|
|
1117
1116
|
yt_dlp/utils/_jsruntime.py,sha256=cPLHquABqggAepWHIYlG9zgrnwjV4Le55mr8Fx71nCo,4319
|
|
1118
1117
|
yt_dlp/utils/_legacy.py,sha256=hmczdkw5SELzsFcB2AUblAY9bw8gIBDuPFTBlYvXe_4,7858
|
|
1119
|
-
yt_dlp/utils/_utils.py,sha256=
|
|
1118
|
+
yt_dlp/utils/_utils.py,sha256=rhzvAlyBERlgLmlNnLQuIzY3xEg9eWH05U1OazHrysI,191027
|
|
1120
1119
|
yt_dlp/utils/networking.py,sha256=OFupeRqIwaw5_GYWRYums5kpy--IyhE7Rt5JkZeFLIM,8651
|
|
1121
1120
|
yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
|
|
1122
1121
|
yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
|
|
1123
1122
|
yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
|
|
1124
1123
|
yt_dlp/utils/jslib/devalue.py,sha256=7DCGK_zUN0ZeV5hwPT06zaRMUxX_hyUyFWqs79rxw24,5621
|
|
1125
|
-
yt_dlp-2025.12.
|
|
1126
|
-
yt_dlp-2025.12.
|
|
1127
|
-
yt_dlp-2025.12.
|
|
1128
|
-
yt_dlp-2025.12.
|
|
1129
|
-
yt_dlp-2025.12.
|
|
1130
|
-
yt_dlp-2025.12.
|
|
1131
|
-
yt_dlp-2025.12.
|
|
1132
|
-
yt_dlp-2025.12.
|
|
1133
|
-
yt_dlp-2025.12.
|
|
1134
|
-
yt_dlp-2025.12.
|
|
1124
|
+
yt_dlp-2025.12.31.233056.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
|
|
1125
|
+
yt_dlp-2025.12.31.233056.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=cPx4ZehhabGCBTYTosfKHInDIeDasDSR2Xtxtl-xo58,165135
|
|
1126
|
+
yt_dlp-2025.12.31.233056.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=v2WQvWvk4qKpp2-97z2ULb5Msj5dgzU6nMkS-FwSmbM,51488
|
|
1127
|
+
yt_dlp-2025.12.31.233056.dev0.data/data/share/man/man1/yt-dlp.1,sha256=yyBAVJTtg0xPpkUsET4pkWywEepOaZ5Pap5UnleI85M,159690
|
|
1128
|
+
yt_dlp-2025.12.31.233056.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
|
|
1129
|
+
yt_dlp-2025.12.31.233056.dev0.dist-info/METADATA,sha256=G1ttyUJFaGDWquZUcSwQSP37E88jFurO0lKvc6XHTXI,180513
|
|
1130
|
+
yt_dlp-2025.12.31.233056.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
1131
|
+
yt_dlp-2025.12.31.233056.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
|
|
1132
|
+
yt_dlp-2025.12.31.233056.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
|
|
1133
|
+
yt_dlp-2025.12.31.233056.dev0.dist-info/RECORD,,
|
yt_dlp/extractor/scte.py
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
|
|
3
|
-
from .common import InfoExtractor
|
|
4
|
-
from ..utils import (
|
|
5
|
-
ExtractorError,
|
|
6
|
-
decode_packed_codes,
|
|
7
|
-
urlencode_postdata,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class SCTEBaseIE(InfoExtractor):
|
|
12
|
-
_LOGIN_URL = 'https://www.scte.org/SCTE/Sign_In.aspx'
|
|
13
|
-
_NETRC_MACHINE = 'scte'
|
|
14
|
-
|
|
15
|
-
def _perform_login(self, username, password):
|
|
16
|
-
login_popup = self._download_webpage(
|
|
17
|
-
self._LOGIN_URL, None, 'Downloading login popup')
|
|
18
|
-
|
|
19
|
-
def is_logged(webpage):
|
|
20
|
-
return any(re.search(p, webpage) for p in (
|
|
21
|
-
r'class=["\']welcome\b', r'>Sign Out<'))
|
|
22
|
-
|
|
23
|
-
# already logged in
|
|
24
|
-
if is_logged(login_popup):
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
login_form = self._hidden_inputs(login_popup)
|
|
28
|
-
|
|
29
|
-
login_form.update({
|
|
30
|
-
'ctl01$TemplateBody$WebPartManager1$gwpciNewContactSignInCommon$ciNewContactSignInCommon$signInUserName': username,
|
|
31
|
-
'ctl01$TemplateBody$WebPartManager1$gwpciNewContactSignInCommon$ciNewContactSignInCommon$signInPassword': password,
|
|
32
|
-
'ctl01$TemplateBody$WebPartManager1$gwpciNewContactSignInCommon$ciNewContactSignInCommon$RememberMe': 'on',
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
response = self._download_webpage(
|
|
36
|
-
self._LOGIN_URL, None, 'Logging in',
|
|
37
|
-
data=urlencode_postdata(login_form))
|
|
38
|
-
|
|
39
|
-
if '|pageRedirect|' not in response and not is_logged(response):
|
|
40
|
-
error = self._html_search_regex(
|
|
41
|
-
r'(?s)<[^>]+class=["\']AsiError["\'][^>]*>(.+?)</',
|
|
42
|
-
response, 'error message', default=None)
|
|
43
|
-
if error:
|
|
44
|
-
raise ExtractorError(f'Unable to login: {error}', expected=True)
|
|
45
|
-
raise ExtractorError('Unable to log in')
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
class SCTEIE(SCTEBaseIE):
|
|
49
|
-
_WORKING = False
|
|
50
|
-
_VALID_URL = r'https?://learning\.scte\.org/mod/scorm/view\.php?.*?\bid=(?P<id>\d+)'
|
|
51
|
-
_TESTS = [{
|
|
52
|
-
'url': 'https://learning.scte.org/mod/scorm/view.php?id=31484',
|
|
53
|
-
'info_dict': {
|
|
54
|
-
'title': 'Introduction to DOCSIS Engineering Professional',
|
|
55
|
-
'id': '31484',
|
|
56
|
-
},
|
|
57
|
-
'playlist_count': 5,
|
|
58
|
-
'skip': 'Requires account credentials',
|
|
59
|
-
}]
|
|
60
|
-
|
|
61
|
-
def _real_extract(self, url):
|
|
62
|
-
video_id = self._match_id(url)
|
|
63
|
-
|
|
64
|
-
webpage = self._download_webpage(url, video_id)
|
|
65
|
-
|
|
66
|
-
title = self._search_regex(r'<h1>(.+?)</h1>', webpage, 'title')
|
|
67
|
-
|
|
68
|
-
context_id = self._search_regex(r'context-(\d+)', webpage, video_id)
|
|
69
|
-
content_base = f'https://learning.scte.org/pluginfile.php/{context_id}/mod_scorm/content/8/'
|
|
70
|
-
context = decode_packed_codes(self._download_webpage(
|
|
71
|
-
f'{content_base}mobile/data.js', video_id))
|
|
72
|
-
|
|
73
|
-
data = self._parse_xml(
|
|
74
|
-
self._search_regex(
|
|
75
|
-
r'CreateData\(\s*"(.+?)"', context, 'data').replace(r"\'", "'"),
|
|
76
|
-
video_id)
|
|
77
|
-
|
|
78
|
-
entries = []
|
|
79
|
-
for asset in data.findall('.//asset'):
|
|
80
|
-
asset_url = asset.get('url')
|
|
81
|
-
if not asset_url or not asset_url.endswith('.mp4'):
|
|
82
|
-
continue
|
|
83
|
-
asset_id = self._search_regex(
|
|
84
|
-
r'video_([^_]+)_', asset_url, 'asset id', default=None)
|
|
85
|
-
if not asset_id:
|
|
86
|
-
continue
|
|
87
|
-
entries.append({
|
|
88
|
-
'id': asset_id,
|
|
89
|
-
'title': title,
|
|
90
|
-
'url': content_base + asset_url,
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
return self.playlist_result(entries, video_id, title)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
class SCTECourseIE(SCTEBaseIE):
|
|
97
|
-
_WORKING = False
|
|
98
|
-
_VALID_URL = r'https?://learning\.scte\.org/(?:mod/sub)?course/view\.php?.*?\bid=(?P<id>\d+)'
|
|
99
|
-
_TESTS = [{
|
|
100
|
-
'url': 'https://learning.scte.org/mod/subcourse/view.php?id=31491',
|
|
101
|
-
'only_matching': True,
|
|
102
|
-
}, {
|
|
103
|
-
'url': 'https://learning.scte.org/course/view.php?id=3639',
|
|
104
|
-
'only_matching': True,
|
|
105
|
-
}, {
|
|
106
|
-
'url': 'https://learning.scte.org/course/view.php?id=3073',
|
|
107
|
-
'only_matching': True,
|
|
108
|
-
}]
|
|
109
|
-
|
|
110
|
-
def _real_extract(self, url):
|
|
111
|
-
course_id = self._match_id(url)
|
|
112
|
-
|
|
113
|
-
webpage = self._download_webpage(url, course_id)
|
|
114
|
-
|
|
115
|
-
title = self._search_regex(
|
|
116
|
-
r'<h1>(.+?)</h1>', webpage, 'title', default=None)
|
|
117
|
-
|
|
118
|
-
entries = []
|
|
119
|
-
for mobj in re.finditer(
|
|
120
|
-
r'''(?x)
|
|
121
|
-
<a[^>]+
|
|
122
|
-
href=(["\'])
|
|
123
|
-
(?P<url>
|
|
124
|
-
https?://learning\.scte\.org/mod/
|
|
125
|
-
(?P<kind>scorm|subcourse)/view\.php?(?:(?!\1).)*?
|
|
126
|
-
\bid=\d+
|
|
127
|
-
)
|
|
128
|
-
''',
|
|
129
|
-
webpage):
|
|
130
|
-
item_url = mobj.group('url')
|
|
131
|
-
if item_url == url:
|
|
132
|
-
continue
|
|
133
|
-
ie = (SCTEIE.ie_key() if mobj.group('kind') == 'scorm'
|
|
134
|
-
else SCTECourseIE.ie_key())
|
|
135
|
-
entries.append(self.url_result(item_url, ie=ie))
|
|
136
|
-
|
|
137
|
-
return self.playlist_result(entries, course_id, title)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|