def METHOD_NAME(self, url):
    display_id, video_id = self._match_valid_url(url).groups()
    data = self._download_json(
        'https://www.televizeseznam.cz/api/graphql', video_id, 'Downloading GraphQL result',
        data=json.dumps({
            'variables': {'urlName': video_id},
            'query': '''
                query LoadEpisode($urlName : String){ episode(urlName: $urlName){ ...VideoDetailFragmentOnEpisode } }
                fragment VideoDetailFragmentOnEpisode on Episode {
                    id
                    spl
                    urlName
                    name
                    perex
                    duration
                    views
                }'''
        }).encode('utf-8'),
        headers={'Content-Type': 'application/json;charset=UTF-8'}
    )['data']['episode']
    spl_url = data['spl'] + 'spl2,3'
    metadata = self._download_json(spl_url, video_id, 'Downloading playlist')
    if 'Location' in metadata and 'data' not in metadata:
        spl_url = metadata['Location']
        metadata = self._download_json(spl_url, video_id, 'Downloading redirected playlist')
    video = metadata['data']
    subtitles = {}
    for subs in video.get('subtitles', {}).values():
        if not subs.get('language'):
            continue
        for ext, sub_url in subs.get('urls').items():
            subtitles.setdefault(subs['language'], []).append({
                'ext': ext,
                'url': urljoin(spl_url, sub_url)
            })
    formats = list(self._extract_formats(spl_url, video))
    return {
        'id': video_id,
        'display_id': display_id,
        'title': data.get('name'),
        'description': data.get('perex'),
        'duration': float_or_none(data.get('duration')),
        'view_count': int_or_none(data.get('views')),
        'formats': formats,
        'subtitles': subtitles,
    }