ytdl-org / youtube-dl

Command-line program to download videos from YouTube.com and other video sites
http://ytdl-org.github.io/youtube-dl/
The Unlicense
129.76k stars 9.78k forks source link

[NBC] No video formats found (ThePlatform: Failed to download m3u8 information: HTTP Error 400: Bad Request) #31458

Open miyagi-sensei opened 1 year ago

miyagi-sensei commented 1 year ago

Checklist

Verbose log

[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['--verbose', '-F', 'https://www.nbc.com/today/video/sunday-today-1823/9000318673']
[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8
[debug] youtube-dl version 2021.12.17
[debug] Python version 3.9.6 (CPython) - macOS-12.6.2-arm64-arm-64bit
[debug] exe versions: ffmpeg 5.1.2, ffprobe 5.1.2, rtmpdump 2.4
[debug] Proxy map: {}
[NBC] 9000318673: Downloading JSON metadata
[ThePlatform] 9000318673: Downloading SMIL data
[ThePlatform] 9000318673: Downloading m3u8 information
WARNING: Failed to download m3u8 information: HTTP Error 400: Bad Request
ERROR: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/Library/Python/3.9/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper
    return func(self, *args, **kwargs)
  File "/Library/Python/3.9/site-packages/youtube_dl/YoutubeDL.py", line 836, in __extract_info
    ie_result = ie.extract(url)
  File "/Library/Python/3.9/site-packages/youtube_dl/extractor/common.py", line 534, in extract
    ie_result = self._real_extract(url)
  File "/Library/Python/3.9/site-packages/youtube_dl/extractor/theplatform.py", line 309, in _real_extract
    self._sort_formats(formats)
  File "/Library/Python/3.9/site-packages/youtube_dl/extractor/common.py", line 1374, in _sort_formats
    raise ExtractorError('No video formats found')
youtube_dl.utils.ExtractorError: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Description

has been broken since Jan 1st, 2023

dirkf commented 1 year ago

Presumably the same issue and fix as yt-dlp#5918, with this common feature:

WARNING: [ThePlatform] Failed to download m3u8 information: HTTP Error 400: Bad Request

Required patch:

--- old/youtube_dl/extractor/nbc.py
+++ new/youtube_dl/extractor/nbc.py
@@ -130,6 +130,7 @@
         query = {
             'mbr': 'true',
             'manifest': 'm3u',
+            'switch': 'HLSServiceSecure',
         }
         video_id = video_data['mpxGuid']
         title = video_data['secondaryTitle']

The original title was better!

GeeReeGee commented 1 year ago

I'm having a similar problem "No Video Formats found" with SBS. I see the green lozenge patch-available. Not sure how I use that ? Thx

Xxxxx :~ xxxxx $ youtube-DL -F --verbose https://www.sbs.com.au/ondemand/watch/1726825539597
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'-F', u'--verbose', u'https://www.sbs.com.au/ondemand/watch/1726825539597']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2021.12.17
[debug] Python version 2.7.10 (CPython) - Darwin-16.7.0-x86_64-i386-64bit
[debug] exe versions: ffmpeg 3.4.2, ffprobe 3.4.2
[debug] Proxy map: {}
[SBS] 1726825539597: Downloading JSON metadata
[ThePlatform] vW3DpH__wRtP: Downloading SMIL data
[ThePlatform] vW3DpH__wRtP: Downloading m3u8 information
WARNING: Failed to download m3u8 information: HTTP Error 403: Forbidden
ERROR: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/local/bin/youtube-DL/youtube_dl/YoutubeDL.py", line 815, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/bin/youtube-DL/youtube_dl/YoutubeDL.py", line 836, in __extract_info
    ie_result = ie.extract(url)
  File "/usr/local/bin/youtube-DL/youtube_dl/extractor/common.py", line 534, in extract
    ie_result = self._real_extract(url)
  File "/usr/local/bin/youtube-DL/youtube_dl/extractor/theplatform.py", line 309, in _real_extract
    self._sort_formats(formats)
  File "/usr/local/bin/youtube-DL/youtube_dl/extractor/common.py", line 1374, in _sort_formats
    raise ExtractorError('No video formats found')
ExtractorError: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
dirkf commented 1 year ago

Similar, not the same. 400 means yt-dl didn't send a request that had what the site expected; 403 means the site saw yt-dl's request and denied access to yt-dl.

You may need to provide --username ... --password ..., or, more likely to succeed, pass cookies from your logged-in browser session using --cookies ....

If you don't succeed please open a new broken site issue.

jaaan-t commented 2 months ago

Presumably the same issue and fix as yt-dlp#5918, with this common feature:

WARNING: [ThePlatform] Failed to download m3u8 information: HTTP Error 400: Bad Request

Required patch:

--- old/youtube_dl/extractor/nbc.py
+++ new/youtube_dl/extractor/nbc.py
@@ -130,6 +130,7 @@
         query = {
             'mbr': 'true',
             'manifest': 'm3u',
+            'switch': 'HLSServiceSecure',
         }
         video_id = video_data['mpxGuid']
         title = video_data['secondaryTitle']

Same issue, this fixed it for me. Thanks! For Mac users who installed ytdl with brew, wondering where this file is: /opt/homebrew/Cellar/youtube-dl/<version>/libexec/lib/python3.12/site-packages/youtube_dl/extractor

3052 commented 2 months ago

note the above does not work for locked content:

> curl link.theplatform.com/s/NnzsPC/media/guid/2304992029/3448375?switch=HLSServiceSecure
{
        "title": "Invalid Token",
        "description": "This content requires a valid, unexpired auth token.",
        "isException": true,
        "exception": "InvalidAuthToken",
        "responseCode": "403"
}

but if you have a Widevine setup you can get it:

msg=POST URL=https://friendship.nbc.co/v2/graphql
msg=GET URL="https://lemonade.nbc.com/v1/vod/2304992029/3448375?platform=web&programmingType=Movie"
msg=GET URL=https://vod-lf-oneapp2-prd.akamaized.net/prod/usa/HN4/Udk/3448375/1701289607724-vzczo/cmaf/mpeg_cenc_2sec/master_cmaf.mpd
msg=GET URL=https://vod-lf-oneapp2-prd.akamaized.net/prod/usa/HN4/Udk/3448375/1701289607724-vzczo/cmaf/mpeg_cenc_2sec/7830k_1080_cmaf/_226617476_1.mp4
msg=POST URL="https://drmproxy.digitalsvc.apps.nbcuni.com/drm-proxy/license/widevine?time=1713910840095&hash=e774057bd8a7ed32c5ebbf9d2398bb28a82eb608d1c83d31a9b3e848afe88d48&device=web"
msg="0.47 %" size="8.67 megabyte" rate="8.55 megabyte/s"