Merge pull request #7045 from remitamine/ign
[youtube-dl] / youtube_dl / extractor / tapely.py
index 2c1178b1baedd592cabff19d386a836ab4f2aa1a..ed560bd246f4e588b9d63be4dcc0f34388d46f89 100644 (file)
@@ -5,18 +5,19 @@ import re
 
 from .common import InfoExtractor
 from ..utils import (
-    ExtractorError,
     clean_html,
-    compat_urllib_request,
+    ExtractorError,
     float_or_none,
     parse_iso8601,
+    sanitized_Request,
 )
 
 
 class TapelyIE(InfoExtractor):
-    _VALID_URL = r'https?://(?:www\.)?tape\.ly/(?P<id>[A-Za-z0-9\-_]+)(?:/(?P<songnr>\d+))?'
+    _VALID_URL = r'https?://(?:www\.)?(?:tape\.ly|tapely\.com)/(?P<id>[A-Za-z0-9\-_]+)(?:/(?P<songnr>\d+))?'
     _API_URL = 'http://tape.ly/showtape?id={0:}'
     _S3_SONG_URL = 'http://mytape.s3.amazonaws.com/{0:}'
+    _SOUNDCLOUD_SONG_URL = 'http://api.soundcloud.com{0:}'
     _TESTS = [
         {
             'url': 'http://tape.ly/my-grief-as-told-by-water',
@@ -39,6 +40,10 @@ class TapelyIE(InfoExtractor):
                 'ext': 'm4a',
             },
         },
+        {
+            'url': 'https://tapely.com/my-grief-as-told-by-water',
+            'only_matching': True,
+        },
     ]
 
     def _real_extract(self, url):
@@ -46,9 +51,10 @@ class TapelyIE(InfoExtractor):
         display_id = mobj.group('id')
 
         playlist_url = self._API_URL.format(display_id)
-        request = compat_urllib_request.Request(playlist_url)
+        request = sanitized_Request(playlist_url)
         request.add_header('X-Requested-With', 'XMLHttpRequest')
         request.add_header('Accept', 'application/json')
+        request.add_header('Referer', url)
 
         playlist = self._download_json(request, display_id)
 
@@ -68,9 +74,15 @@ class TapelyIE(InfoExtractor):
                 })
                 entries.append(entry)
             elif song['source'] == 'YT':
-                _, _, yt_id = song['filename'].split('/')
+                self.to_screen('YouTube video detected')
+                yt_id = song['filename'].replace('/youtube/', '')
                 entry.update(self.url_result(yt_id, 'Youtube', video_id=yt_id))
                 entries.append(entry)
+            elif song['source'] == 'SC':
+                self.to_screen('SoundCloud song detected')
+                sc_url = self._SOUNDCLOUD_SONG_URL.format(song['filename'])
+                entry.update(self.url_result(sc_url, 'Soundcloud'))
+                entries.append(entry)
             else:
                 self.report_warning('Unknown song source: %s' % song['source'])