+ def get_text(x):
+ if not x:
+ return
+ text = x.get('simpleText')
+ if text and isinstance(text, compat_str):
+ return text
+ runs = x.get('runs')
+ if not isinstance(runs, list):
+ return
+ return ''.join([r['text'] for r in runs if isinstance(r.get('text'), compat_str)])
+
+ ytm_streaming_data = {}
+ if is_music_url:
+ # we are forcing to use parse_json because 141 only appeared in get_video_info.
+ # el, c, cver, cplayer field required for 141(aac 256kbps) codec
+ # maybe paramter of youtube music player?
+ ytm_player_response = self._parse_json(try_get(compat_parse_qs(
+ self._download_webpage(
+ base_url + 'get_video_info', video_id,
+ 'Fetching youtube-music info webpage',
+ 'unable to download youtube-music info webpage', query={
+ 'video_id': video_id,
+ 'eurl': 'https://youtube.googleapis.com/v/' + video_id,
+ 'el': 'detailpage',
+ 'c': 'WEB_REMIX',
+ 'cver': '0.1',
+ 'cplayer': 'UNIPLAYER'
+ }, fatal=False)),
+ lambda x: x['player_response'][0],
+ compat_str) or '{}', video_id)
+ ytm_streaming_data = ytm_player_response.get('streamingData') or {}
+