mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[vk:wallpost] Fix audio extraction
This commit is contained in:
		| @@ -1,6 +1,7 @@ | ||||
| # encoding: utf-8 | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import collections | ||||
| import re | ||||
| import json | ||||
| import sys | ||||
| @@ -16,7 +17,6 @@ from ..utils import ( | ||||
|     get_element_by_class, | ||||
|     int_or_none, | ||||
|     orderedSet, | ||||
|     parse_duration, | ||||
|     remove_start, | ||||
|     str_to_int, | ||||
|     unescapeHTML, | ||||
| @@ -447,6 +447,9 @@ class VKWallPostIE(VKBaseIE): | ||||
|                 'skip_download': True, | ||||
|             }, | ||||
|         }], | ||||
|         'params': { | ||||
|             'usenetrc': True, | ||||
|         }, | ||||
|         'skip': 'Requires vk account credentials', | ||||
|     }, { | ||||
|         # single YouTube embed, no leading - | ||||
| @@ -456,6 +459,9 @@ class VKWallPostIE(VKBaseIE): | ||||
|             'title': 'Sergey Gorbunov - Wall post 85155021_6319', | ||||
|         }, | ||||
|         'playlist_count': 1, | ||||
|         'params': { | ||||
|             'usenetrc': True, | ||||
|         }, | ||||
|         'skip': 'Requires vk account credentials', | ||||
|     }, { | ||||
|         # wall page URL | ||||
| @@ -483,37 +489,41 @@ class VKWallPostIE(VKBaseIE): | ||||
|             raise ExtractorError('VK said: %s' % error, expected=True) | ||||
|  | ||||
|         description = clean_html(get_element_by_class('wall_post_text', webpage)) | ||||
|         uploader = clean_html(get_element_by_class( | ||||
|             'fw_post_author', webpage)) or self._og_search_description(webpage) | ||||
|         uploader = clean_html(get_element_by_class('author', webpage)) | ||||
|         thumbnail = self._og_search_thumbnail(webpage) | ||||
|  | ||||
|         entries = [] | ||||
|  | ||||
|         for audio in re.finditer(r'''(?sx) | ||||
|                             <input[^>]+ | ||||
|                                 id=(?P<q1>["\'])audio_info(?P<id>\d+_\d+).*?(?P=q1)[^>]+ | ||||
|                                 value=(?P<q2>["\'])(?P<url>http.+?)(?P=q2) | ||||
|                                 .+? | ||||
|                             </table>''', webpage): | ||||
|             audio_html = audio.group(0) | ||||
|             audio_id = audio.group('id') | ||||
|             duration = parse_duration(get_element_by_class('duration', audio_html)) | ||||
|             track = self._html_search_regex( | ||||
|                 r'<span[^>]+id=["\']title%s[^>]*>([^<]+)' % audio_id, | ||||
|                 audio_html, 'title', default=None) | ||||
|             artist = self._html_search_regex( | ||||
|                 r'>([^<]+)</a></b>\s*&ndash', audio_html, | ||||
|                 'artist', default=None) | ||||
|             entries.append({ | ||||
|                 'id': audio_id, | ||||
|                 'url': audio.group('url'), | ||||
|                 'title': '%s - %s' % (artist, track) if artist and track else audio_id, | ||||
|                 'thumbnail': thumbnail, | ||||
|                 'duration': duration, | ||||
|                 'uploader': uploader, | ||||
|                 'artist': artist, | ||||
|                 'track': track, | ||||
|             }) | ||||
|         audio_ids = re.findall(r'data-full-id=["\'](\d+_\d+)', webpage) | ||||
|         if audio_ids: | ||||
|             al_audio = self._download_webpage( | ||||
|                 'https://vk.com/al_audio.php', post_id, | ||||
|                 note='Downloading audio info', fatal=False, | ||||
|                 data=urlencode_postdata({ | ||||
|                     'act': 'reload_audio', | ||||
|                     'al': '1', | ||||
|                     'ids': ','.join(audio_ids) | ||||
|                 })) | ||||
|             if al_audio: | ||||
|                 Audio = collections.namedtuple( | ||||
|                     'Audio', ['id', 'user_id', 'url', 'track', 'artist', 'duration']) | ||||
|                 audios = self._parse_json( | ||||
|                     self._search_regex( | ||||
|                         r'<!json>(.+?)<!>', al_audio, 'audios', default='[]'), | ||||
|                     post_id, fatal=False, transform_source=unescapeHTML) | ||||
|                 if isinstance(audios, list): | ||||
|                     for audio in audios: | ||||
|                         a = Audio._make(audio[:6]) | ||||
|                         entries.append({ | ||||
|                             'id': '%s_%s' % (a.user_id, a.id), | ||||
|                             'url': a.url, | ||||
|                             'title': '%s - %s' % (a.artist, a.track) if a.artist and a.track else a.id, | ||||
|                             'thumbnail': thumbnail, | ||||
|                             'duration': a.duration, | ||||
|                             'uploader': uploader, | ||||
|                             'artist': a.artist, | ||||
|                             'track': a.track, | ||||
|                         }) | ||||
|  | ||||
|         for video in re.finditer( | ||||
|                 r'<a[^>]+href=(["\'])(?P<url>/video(?:-?[\d_]+).*?)\1', webpage): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․