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.
Files changed (20) hide show
  1. yt_dlp/extractor/_extractors.py +0 -4
  2. yt_dlp/extractor/facebook.py +0 -64
  3. yt_dlp/extractor/iqiyi.py +0 -184
  4. yt_dlp/extractor/lazy_extractors.py +2 -33
  5. yt_dlp/extractor/nebula.py +9 -1
  6. yt_dlp/extractor/twitter.py +37 -194
  7. yt_dlp/extractor/youtube/_video.py +53 -28
  8. yt_dlp/utils/_utils.py +1 -1
  9. yt_dlp/version.py +3 -3
  10. {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/METADATA +1 -1
  11. {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/RECORD +19 -20
  12. yt_dlp/extractor/scte.py +0 -137
  13. {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
  14. {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
  15. {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
  16. {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
  17. {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
  18. {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/WHEEL +0 -0
  19. {yt_dlp-2025.12.29.233040.dev0.dist-info → yt_dlp-2025.12.31.233056.dev0.dist-info}/entry_points.txt +0 -0
  20. {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=wDYRUMT_zumtcfgpBv8NwMcW6QWrtS7QQag9OYmtWyM,360
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=ylDtjGCXNpaFcwWEROaN6sY1fE-_OkNBcdMarTOVopc,54452
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=esDY7R2HF4xgIRgsm5d2ccJfj7biOcNyfq_TuiVqMWY,56135
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=JT3k5aDk55sRSs1umfobt7OVS8ICgApCgCjhcuPbcuo,31008
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=_TAARQ4Y5TFizDrlri0n0MTDMTyzY8772k8GUjmD8pY,813706
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=wHte1PbcugiyJvdCh78UwY_hilCxKFvfAh5aBuJvF4A,23451
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=om9bZOW7r-9v5Wqa9VIAsM8BUl8v0l6Jc9aNUChgjkg,82673
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=gsgpDffY8iV4p8ipF0KWyiWUTKO2zXCWv29O5mAo-Ec,212382
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=Oz38CnmDb-vQ38-YEWSk20x687uUu9zjeJz9rlw4Suc,191017
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.29.233040.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1126
- yt_dlp-2025.12.29.233040.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=cPx4ZehhabGCBTYTosfKHInDIeDasDSR2Xtxtl-xo58,165135
1127
- yt_dlp-2025.12.29.233040.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=v2WQvWvk4qKpp2-97z2ULb5Msj5dgzU6nMkS-FwSmbM,51488
1128
- yt_dlp-2025.12.29.233040.dev0.data/data/share/man/man1/yt-dlp.1,sha256=yyBAVJTtg0xPpkUsET4pkWywEepOaZ5Pap5UnleI85M,159690
1129
- yt_dlp-2025.12.29.233040.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1130
- yt_dlp-2025.12.29.233040.dev0.dist-info/METADATA,sha256=bJp7Q2yX-pJAMGAucvtPrzJUNg1N1d5aSOHio7MORjc,180513
1131
- yt_dlp-2025.12.29.233040.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1132
- yt_dlp-2025.12.29.233040.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1133
- yt_dlp-2025.12.29.233040.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1134
- yt_dlp-2025.12.29.233040.dev0.dist-info/RECORD,,
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)