[soundcloud] imporve private playlist/set tracks extraction
https://github.com/ytdl-org/youtube-dl/issues/3707#issuecomment-577873539
This commit is contained in:
		
							parent
							
								
									76dbe4df5f
								
							
						
					
					
						commit
						2a5c26c980
					
				
					 1 changed files with 20 additions and 12 deletions
				
			
		| 
						 | 
					@ -238,7 +238,7 @@ class SoundcloudIE(InfoExtractor):
 | 
				
			||||||
                'ext': 'mp3',
 | 
					                'ext': 'mp3',
 | 
				
			||||||
                'title': 'Mezzo Valzer',
 | 
					                'title': 'Mezzo Valzer',
 | 
				
			||||||
                'description': 'md5:4138d582f81866a530317bae316e8b61',
 | 
					                'description': 'md5:4138d582f81866a530317bae316e8b61',
 | 
				
			||||||
                'uploader': 'Giovanni Sarani',
 | 
					                'uploader': 'Micronie',
 | 
				
			||||||
                'uploader_id': '3352531',
 | 
					                'uploader_id': '3352531',
 | 
				
			||||||
                'timestamp': 1551394171,
 | 
					                'timestamp': 1551394171,
 | 
				
			||||||
                'upload_date': '20190228',
 | 
					                'upload_date': '20190228',
 | 
				
			||||||
| 
						 | 
					@ -524,7 +524,17 @@ class SoundcloudIE(InfoExtractor):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SoundcloudPlaylistBaseIE(SoundcloudIE):
 | 
					class SoundcloudPlaylistBaseIE(SoundcloudIE):
 | 
				
			||||||
    def _extract_track_entries(self, tracks, token=None):
 | 
					    def _extract_set(self, playlist, token=None):
 | 
				
			||||||
 | 
					        playlist_id = compat_str(playlist['id'])
 | 
				
			||||||
 | 
					        tracks = playlist.get('tracks') or []
 | 
				
			||||||
 | 
					        if not all([t.get('permalink_url') for t in tracks]) and token:
 | 
				
			||||||
 | 
					            tracks = self._download_json(
 | 
				
			||||||
 | 
					                self._API_V2_BASE + 'tracks', playlist_id,
 | 
				
			||||||
 | 
					                'Downloading tracks', query={
 | 
				
			||||||
 | 
					                    'ids': ','.join([compat_str(t['id']) for t in tracks]),
 | 
				
			||||||
 | 
					                    'playlistId': playlist_id,
 | 
				
			||||||
 | 
					                    'playlistSecretToken': token,
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
        entries = []
 | 
					        entries = []
 | 
				
			||||||
        for track in tracks:
 | 
					        for track in tracks:
 | 
				
			||||||
            track_id = str_or_none(track.get('id'))
 | 
					            track_id = str_or_none(track.get('id'))
 | 
				
			||||||
| 
						 | 
					@ -537,7 +547,10 @@ class SoundcloudPlaylistBaseIE(SoundcloudIE):
 | 
				
			||||||
                    url += '?secret_token=' + token
 | 
					                    url += '?secret_token=' + token
 | 
				
			||||||
            entries.append(self.url_result(
 | 
					            entries.append(self.url_result(
 | 
				
			||||||
                url, SoundcloudIE.ie_key(), track_id))
 | 
					                url, SoundcloudIE.ie_key(), track_id))
 | 
				
			||||||
        return entries
 | 
					        return self.playlist_result(
 | 
				
			||||||
 | 
					            entries, playlist_id,
 | 
				
			||||||
 | 
					            playlist.get('title'),
 | 
				
			||||||
 | 
					            playlist.get('description'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SoundcloudSetIE(SoundcloudPlaylistBaseIE):
 | 
					class SoundcloudSetIE(SoundcloudPlaylistBaseIE):
 | 
				
			||||||
| 
						 | 
					@ -548,6 +561,7 @@ class SoundcloudSetIE(SoundcloudPlaylistBaseIE):
 | 
				
			||||||
        'info_dict': {
 | 
					        'info_dict': {
 | 
				
			||||||
            'id': '2284613',
 | 
					            'id': '2284613',
 | 
				
			||||||
            'title': 'The Royal Concept EP',
 | 
					            'title': 'The Royal Concept EP',
 | 
				
			||||||
 | 
					            'description': 'md5:71d07087c7a449e8941a70a29e34671e',
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        'playlist_mincount': 5,
 | 
					        'playlist_mincount': 5,
 | 
				
			||||||
    }, {
 | 
					    }, {
 | 
				
			||||||
| 
						 | 
					@ -570,13 +584,10 @@ class SoundcloudSetIE(SoundcloudPlaylistBaseIE):
 | 
				
			||||||
            msgs = (compat_str(err['error_message']) for err in info['errors'])
 | 
					            msgs = (compat_str(err['error_message']) for err in info['errors'])
 | 
				
			||||||
            raise ExtractorError('unable to download video webpage: %s' % ','.join(msgs))
 | 
					            raise ExtractorError('unable to download video webpage: %s' % ','.join(msgs))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        entries = self._extract_track_entries(info['tracks'], token)
 | 
					        return self._extract_set(info, token)
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return self.playlist_result(
 | 
					 | 
				
			||||||
            entries, str_or_none(info.get('id')), info.get('title'))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SoundcloudPagedPlaylistBaseIE(SoundcloudPlaylistBaseIE):
 | 
					class SoundcloudPagedPlaylistBaseIE(SoundcloudIE):
 | 
				
			||||||
    def _extract_playlist(self, base_url, playlist_id, playlist_title):
 | 
					    def _extract_playlist(self, base_url, playlist_id, playlist_title):
 | 
				
			||||||
        COMMON_QUERY = {
 | 
					        COMMON_QUERY = {
 | 
				
			||||||
            'limit': 2000000000,
 | 
					            'limit': 2000000000,
 | 
				
			||||||
| 
						 | 
					@ -774,10 +785,7 @@ class SoundcloudPlaylistIE(SoundcloudPlaylistBaseIE):
 | 
				
			||||||
            self._API_V2_BASE + 'playlists/' + playlist_id,
 | 
					            self._API_V2_BASE + 'playlists/' + playlist_id,
 | 
				
			||||||
            playlist_id, 'Downloading playlist', query=query)
 | 
					            playlist_id, 'Downloading playlist', query=query)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        entries = self._extract_track_entries(data['tracks'], token)
 | 
					        return self._extract_set(data, token)
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return self.playlist_result(
 | 
					 | 
				
			||||||
            entries, playlist_id, data.get('title'), data.get('description'))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SoundcloudSearchIE(SearchInfoExtractor, SoundcloudIE):
 | 
					class SoundcloudSearchIE(SearchInfoExtractor, SoundcloudIE):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue