]> jfr.im git - yt-dlp.git/commitdiff
[audius] Fix extractor
authorpukkandan <redacted>
Mon, 1 Feb 2021 09:28:15 +0000 (14:58 +0530)
committerpukkandan <redacted>
Mon, 1 Feb 2021 09:33:59 +0000 (15:03 +0530)
docs/supportedsites.md
youtube_dlc/extractor/audius.py
youtube_dlc/extractor/extractors.py

index abd7b05e345c78069cda68287a13bd00e2dacae9..c422bf58fe795e683a09918af8da223e78801f31 100644 (file)
@@ -80,8 +80,9 @@ # Supported sites
  - **AudioBoom**
  - **audiomack**
  - **audiomack:album**
- - **Audius**
- - **audius:playlist**
+ - **Audius**: Audius.co
+ - **audius:playlist**: Audius.co playlists
+ - **audius:track**: Audius track ID or API link. Prepend with "audius:"
  - **AWAAN**
  - **awaan:live**
  - **awaan:season**
index 4d4b90a2504a9833f1bcc7ec8059170627af6bdb..2cbc97fcd7a77e5ab77d0ca4c1b2102a806215e9 100644 (file)
@@ -76,6 +76,7 @@ def _resolve_url(self, url, item_id):
 
 class AudiusIE(AudiusBaseIE):
     _VALID_URL = r'''(?x)https?://(?:www\.)?(?:audius\.co/(?P<uploader>[\w\d-]+)(?!/album|/playlist)/(?P<title>\S+))'''
+    IE_DESC = 'Audius.co'
     _TESTS = [
         {
             # URL from Chrome address bar which replace backslash to forward slash
@@ -124,11 +125,15 @@ class AudiusIE(AudiusBaseIE):
 
     def _real_extract(self, url):
         mobj = re.match(self._VALID_URL, url)
-        uploader, title, track_id = mobj.groups()
+        track_id = try_get(mobj, lambda x: x.group('track_id'))
         if track_id is None:
+            title = mobj.group('title')
+            # uploader = mobj.group('uploader')
             url = self._prepare_url(url, title)
             track_data = self._resolve_url(url, title)
         else:  # API link
+            title = None
+            # uploader = None
             track_data = self._api_request('/tracks/%s' % track_id, track_id)
 
         if not isinstance(track_data, dict):
@@ -167,9 +172,26 @@ def _real_extract(self, url):
         }
 
 
+class AudiusTrackIE(AudiusIE):
+    _VALID_URL = r'''(?x)(?:audius:)(?:https?://(?:www\.)?.+/v1/tracks/)?(?P<track_id>\w+)'''
+    IE_NAME = 'audius:track'
+    IE_DESC = 'Audius track ID or API link. Prepend with "audius:"'
+    _TESTS = [
+        {
+            'url': 'audius:9RWlo',
+            'only_matching': True
+        },
+        {
+            'url': 'audius:http://discoveryprovider.audius.prod-us-west-2.staked.cloud/v1/tracks/9RWlo',
+            'only_matching': True
+        },
+    ]
+
+
 class AudiusPlaylistIE(AudiusBaseIE):
     _VALID_URL = r'https?://(?:www\.)?audius\.co/(?P<uploader>[\w\d-]+)/(?:album|playlist)/(?P<title>\S+)'
     IE_NAME = 'audius:playlist'
+    IE_DESC = 'Audius.co playlists'
     _TEST = {
         'url': 'https://audius.co/test_acc/playlist/test-playlist-22910',
         'info_dict': {
@@ -189,14 +211,15 @@ def _build_playlist(self, tracks):
             if not track_id:
                 raise ExtractorError('Unable to get track ID from playlist')
             entries.append(self.url_result(
-                '%s%s/tracks/%s' % (self._API_BASE, self._API_V, track_id),
-                ie=AudiusIE.ie_key(), video_id=track_id))
+                'audius:%s' % track_id,
+                ie=AudiusTrackIE.ie_key(), video_id=track_id))
         return entries
 
     def _real_extract(self, url):
         self._select_api_base()
         mobj = re.match(self._VALID_URL, url)
-        uploader, title = mobj.groups()
+        title = mobj.group('title')
+        # uploader = mobj.group('uploader')
         url = self._prepare_url(url, title)
         playlist_response = self._resolve_url(url, title)
 
index 8e109819744c8591ed009557817b2f89d476e153..d9e48680e786d1fdc189fb151193b4986b64e8da 100644 (file)
 from .audimedia import AudiMediaIE
 from .audioboom import AudioBoomIE
 from .audiomack import AudiomackIE, AudiomackAlbumIE
-from .audius import AudiusIE, AudiusPlaylistIE
+from .audius import (
+    AudiusIE,
+    AudiusTrackIE,
+    AudiusPlaylistIE
+)
 from .awaan import (
     AWAANIE,
     AWAANVideoIE,