diff options
| -rw-r--r-- | youtube_dl/extractor/soundcloud.py | 21 | 
1 files changed, 13 insertions, 8 deletions
| diff --git a/youtube_dl/extractor/soundcloud.py b/youtube_dl/extractor/soundcloud.py index 6b510a43b..bba29d845 100644 --- a/youtube_dl/extractor/soundcloud.py +++ b/youtube_dl/extractor/soundcloud.py @@ -477,7 +477,7 @@ class SoundcloudPlaylistIE(SoundcloudIE):  class SoundcloudSearchIE(SearchInfoExtractor, SoundcloudIE):      IE_NAME = 'soundcloud:search'      IE_DESC = 'Soundcloud search' -    _MAX_RESULTS = 200 +    _MAX_RESULTS = float('inf')      _TESTS = [{          'url': 'scsearch15:post-avant jazzcore',          'info_dict': { @@ -487,24 +487,28 @@ class SoundcloudSearchIE(SearchInfoExtractor, SoundcloudIE):      }]      _SEARCH_KEY = 'scsearch' -    _RESULTS_PER_PAGE = 50 +    _MAX_RESULTS_PER_PAGE = 200 +    _DEFAULT_RESULTS_PER_PAGE = 50      _API_V2_BASE = 'https://api-v2.soundcloud.com'      def _get_collection(self, endpoint, collection_id, **query): -        query['limit'] = self._RESULTS_PER_PAGE +        query['limit'] = results_per_page = min( +            query.get('limit', self._DEFAULT_RESULTS_PER_PAGE), +            self._MAX_RESULTS_PER_PAGE)          query['client_id'] = self._CLIENT_ID          query['linked_partitioning'] = '1' -        total_results = self._MAX_RESULTS +        total_results = None          collected_results = 0          next_url = None          for i in itertools.count():              if not next_url: -                query['offset'] = i * self._RESULTS_PER_PAGE +                query['offset'] = i * results_per_page                  data = compat_urllib_parse.urlencode(query) -                next_url = '{0}{1}?{2}'.format(self._API_V2_BASE, endpoint, data) +                next_url = '{0}{1}?{2}'.format( +                    self._API_V2_BASE, endpoint, data)              response = self._download_json(next_url,                      video_id=collection_id, @@ -520,7 +524,8 @@ class SoundcloudSearchIE(SearchInfoExtractor, SoundcloudIE):              for item in filter(bool, collection):                  yield item -            if collected_results >= total_results or not collection: +            if (total_results is not None and +                collected_results >= total_results) or not collection:                  break              next_url = response.get('next_href', None) @@ -528,7 +533,7 @@ class SoundcloudSearchIE(SearchInfoExtractor, SoundcloudIE):      def _get_n_results(self, query, n):          tracks = self._get_collection('/search/tracks',              collection_id='Query "{0}"'.format(query), -            q=query.encode('utf-8')) +            limit=n, q=query)          results = [self.url_result(url=track['uri'])              for track in itertools.islice(tracks, n)] | 
