

def _real_extract(self, url):
    mobj = re.match(self._VALID_URL, url)
    display_id = mobj.group('id')
    playlist_url = self._API_URL.format(display_id)
    request = compat_urllib_request.Request(playlist_url)
    request.add_header('X-Requested-With', 'XMLHttpRequest')
    request.add_header('Accept', 'application/json')
    request.add_header('Referer', url)
    playlist = self._download_json(request, display_id)
    tape = playlist['tape']
    entries = []
    for s in tape['songs']:
        song = s['song']
        entry = {
            'id': song['id'],
            'duration': float_or_none(song.get('songduration'), 1000),
            'title': song['title'],
        }
        if (song['source'] == 'S3'):
            entry.update({
                'url': self._S3_SONG_URL.format(song['filename']),
            })
            entries.append(entry)
        elif (song['source'] == 'YT'):
            self.to_screen('YouTube video detected')
            yt_id = song['filename'].replace('/youtube/', '')
            entry.update(self.url_result(yt_id, 'Youtube', video_id=yt_id))
            entries.append(entry)
        elif (song['source'] == 'SC'):
            self.to_screen('SoundCloud song detected')
            sc_url = self._SOUNDCLOUD_SONG_URL.format(song['filename'])
            entry.update(self.url_result(sc_url, 'Soundcloud'))
            entries.append(entry)
        else:
            self.report_warning(('Unknown song source: %s' % song['source']))
    if mobj.group('songnr'):
        songnr = (int(mobj.group('songnr')) - 1)
        try:
            return entries[songnr]
        except IndexError:
            raise ExtractorError(('No song with index: %s' % mobj.group('songnr')), expected=True)
    return {
        '_type': 'playlist',
        'id': tape['id'],
        'display_id': display_id,
        'title': tape['name'],
        'entries': entries,
        'thumbnail': tape.get('image_url'),
        'description': clean_html(tape.get('subtext')),
        'like_count': tape.get('likescount'),
        'uploader_id': tape.get('user_id'),
        'timestamp': parse_iso8601(tape.get('published_at')),
    }

dataset/ETHPy150Open yasoob/youtube-dl-GUI/youtube_dl/extractor/tapely.py TapelyIE._real_extract/original