Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[twitch] Error getting data in GQL response #31683

Open
6 tasks done
DesweR opened this issue Feb 24, 2023 · 1 comment
Open
6 tasks done

[twitch] Error getting data in GQL response #31683

DesweR opened this issue Feb 24, 2023 · 1 comment
Labels
broken-IE problem with existing site extraction patch-available yt-dlp working or fix available in yt-dlp

Comments

@DesweR
Copy link
Contributor

DesweR commented Feb 24, 2023

Checklist

  • I'm reporting a broken site support issue
  • I've verified that I'm running youtube-dl version 2022.11.13 / last commit: 1a4fbe8
  • I've checked that all provided URLs are alive and playable in a browser
  • I've checked that all URLs and arguments with special characters are properly quoted or escaped
  • I've searched the bugtracker for similar bug reports including closed ones
  • I've read bugs section in FAQ

Verbose log

youtube-dl.exe -v -F https://www.twitch.tv/videos/1744660246

[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v', '-F', 'https://www.twitch.tv/videos/1744660246']
[debug] Encodings: locale cp1251, fs mbcs, out cp1251, pref cp1251
[debug] youtube-dl version 2021.12.17
[debug] Python version 3.4.4 (CPython) - Windows-XP-5.1.2600-SP3
[debug] exe versions: none
[debug] Proxy map: {}

[twitch:vod] 1744660246: Downloading stream metadata GraphQL

ERROR: An extractor error has occurred. (caused by KeyError('data',)); 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 "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\common.py", line 535, in extract
    ie_result = self._real_extract(url)
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\twitch.py", line 332, in _real_extract
    info = self._download_info(vod_id)
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\twitch.py", line 263, in _download_info
    'Downloading stream metadata GraphQL')[0]['data']
KeyError: 'data'
Traceback (most recent call last):
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\common.py", line 535, in extract
    ie_result = self._real_extract(url)
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\twitch.py", line 332, in _real_extract
    info = self._download_info(vod_id)
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\twitch.py", line 263, in _download_info
    'Downloading stream metadata GraphQL')[0]['data']
KeyError: 'data'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\YoutubeDL.py", line 816, in wrapper
    return func(self, *args, **kwargs)
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\YoutubeDL.py", line 837, in __extract_info
    ie_result = ie.extract(url)
  File "D:\Python27\Scripts\youtube-dl-master\dist\sse\youtube-dl.exe\youtube_dl\extractor\common.py", line 548, in extract
    raise ExtractorError('An extractor error has occurred.', cause=e)
youtube_dl.utils.ExtractorError: An extractor error has occurred. (caused by KeyError('data',)); 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.

Description

The error description is here.
The solution is here.

twitch.py

from ..utils import (
    ...
    traverse_obj,
    ...
)

    def _download_info(self, item_id):
        data = self._download_gql(
            item_id, [{
                'operationName': 'VideoMetadata',
                'variables': {
                    'channelLogin': '',
                    'videoID': item_id,
                },
            }],
            'Downloading stream metadata GraphQL')
        video = traverse_obj(data, (Ellipsis, 'data', 'video'), get_all=False)
        if video is None:
            raise ExtractorError(
                'Video %s does not exist' % item_id, expected=True)
        return self._extract_info_gql(video, item_id)
@dirkf
Copy link
Contributor

dirkf commented Feb 24, 2023

Or this for patching a yt-dl like the release that doesn't have traverse_obj():

-        video = traverse_obj(data, (Ellipsis, 'data', 'video'), get_all=False)
+        video = next(filter(None, (try_get(y, lambda x: x['data']['video'], dict) for y in data or [])), None)

@dirkf dirkf added broken-IE problem with existing site extraction patch-available yt-dlp working or fix available in yt-dlp labels Feb 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
broken-IE problem with existing site extraction patch-available yt-dlp working or fix available in yt-dlp
Projects
None yet
Development

No branches or pull requests

2 participants