diff options
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 5 | ||||
| -rw-r--r-- | youtube_dl/extractor/periscope.py | 21 | 
2 files changed, 25 insertions, 1 deletions
| diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index bd86a5be2..e38e77a27 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -432,7 +432,10 @@ from .orf import (  from .parliamentliveuk import ParliamentLiveUKIE  from .patreon import PatreonIE  from .pbs import PBSIE -from .periscope import PeriscopeIE +from .periscope import ( +    PeriscopeIE, +    QuickscopeIE, +)  from .philharmoniedeparis import PhilharmonieDeParisIE  from .phoenix import PhoenixIE  from .photobucket import PhotobucketIE diff --git a/youtube_dl/extractor/periscope.py b/youtube_dl/extractor/periscope.py index de53b752d..578b53a24 100644 --- a/youtube_dl/extractor/periscope.py +++ b/youtube_dl/extractor/periscope.py @@ -76,3 +76,24 @@ class PeriscopeIE(InfoExtractor):              'thumbnails': thumbnails,              'formats': formats,          } + + +class QuickscopeIE(InfoExtractor): +    IE_DESC = 'Quisck Scope' +    _VALID_URL = r'https?://watchonperiscope\.com/broadcast/(?P<id>\d+)' +    _TEST = { +        'url': 'https://watchonperiscope.com/broadcast/56180087', +        'only_matching': True, +    } + +    def _real_extract(self, url): +        broadcast_id = self._match_id(url) +        request = compat_urllib_request.Request( +            'https://watchonperiscope.com/api/accessChannel', compat_urllib_parse.urlencode({ +                'broadcast_id': broadcast_id, +                'entry_ticket': '', +                'from_push': 'false', +                'uses_sessions': 'true', +            }).encode('utf-8')) +        return self.url_result( +            self._download_json(request, broadcast_id)['share_url'], 'Periscope') | 
